如何在Python 3.5.1中打印整数的所有因式分解

如何在Python 3.5.1中打印整数的所有因式分解,python,factorization,Python,Factorization,我是编程新手,并尝试学习for循环,使用if语句嵌套for循环 我编写此代码是为了生成整数的所有因式分解n: n=int(input()) for i in range(0,n+1): for j in range(0,i): if i*j == n: print(i,'times',j,'equals',n) break 现在,如果n=10,则产生以下结果: 5乘以2等于10 10乘以1等于10 这个有几个问题。首先,它

我是编程新手,并尝试学习for循环,使用if语句嵌套for循环

我编写此代码是为了生成整数的所有因式分解
n

n=int(input())
for i in range(0,n+1):
    for j in range(0,i):
        if i*j == n:
            print(i,'times',j,'equals',n)
            break
现在,如果n=10,则产生以下结果:

5乘以2等于10
10乘以1等于10

这个有几个问题。首先,它忽略了第一个因子分解,即

1乘以10等于10

第二个问题我希望在结果中交换
i
j
,即它应该说:

1乘以10等于10
2乘以5等于10
10乘以1等于10

不是

1乘以10等于10
5乘以2等于10
10乘以1等于10

这里,
j
(0,i)
的范围内,这意味着当
i
1
时,
j
0
迭代到
1
,当然当
n
10
时,它们的产品不会是
n

解决方法很简单:

for i in range(0,n+1):
    for j in range(0,n+1):

但是,对于大型
n
,该算法非常慢。您不必迭代
j
并测试
i*j==n
,只需使用
n/i
计算
j
,并测试它是否为整数即可

另一个优化是:考虑到因子是成对的,您只需要迭代
i
n
的平方根,而不是一直迭代到
n

,尝试以下方法:

n = int(input())
for i in range(1, int(n / 2) + 1):
    for j in range(1, i):
        if i * j == n:
            print(j, ' times ', i, ' equals ' , n)
很少观察到:

  • 如果您想要获得所有的因素,您可能不需要break语句
  • 也可能有重复的
  • 您可以从1开始循环
  • 您可以将第一个循环限制为n/2,因为n/2是小于n的最大因子
请将此代码作为起点,而不是复制粘贴解决方案


我建议您使用最少数量的循环,并且应该关注代码的效率。例如,您可以这样做:

from math import sqrt  #this imports square root from math

n=int(input())
for i in range(1,int(sqrt(n))+1): # this will help in less number of iterations
    if n%i==0:  #checks if n is properly divisible by i or not!
       j=n/i    # if yes then i,j are the factors of n

您现在可以打印所有因子,或者在找到第一个因子时使用Break语句

您所需的输出中没有“5乘以2等于10”。有什么特别的原因吗?这是我根据你的建议写的代码。显然,它也在起作用。感谢
n=int(input())在范围(1,n+1)内的i:if n%i==0:print(i,'times',str(int(n//i)),'equals',n)
from math import sqrt  #this imports square root from math

n=int(input())
for i in range(1,int(sqrt(n))+1): # this will help in less number of iterations
    if n%i==0:  #checks if n is properly divisible by i or not!
       j=n/i    # if yes then i,j are the factors of n