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

How to print all factorization of an integer in Python 3.5.1

我是编程新手,正在尝试学习 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 times 2 equals 10
10 times 1 equals 10

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

1 times 10 equals 10

第二个问题我想交换 ij 结果,即它应该说:

1 times 10 equals 10
2 times 5 equals 10
10 times 1 equals 10

没有

1 times 10 equals 10
5 times 2 equals 10
10 times 1 equals 10

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

这里,j(0,i)范围内,也就是说,当i1时,j迭代自0 1,当然他们的乘积不会是 nn10.

修复很简单:

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

然而,算法对于大 n 来说相当慢。您不必迭代 j 并测试是否 i * j == n,只需使用 n / i 计算 j 并测试它是否为整数即可。

另一个优化是:考虑到因子是成对的,只需要迭代in的平方根,而不是一直迭代到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)

Few observations:

  • You may not require the break statement if you want to have all the factors
  • There may be duplicates also
  • You may start the loop from 1
  • You may limit the first loop to n/2 as n/2 is the greatest factor less than n

Please take this code as a starting point and not a copy-paste solution.

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

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 语句