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

时间:2016-06-26 01:38:06

标签: python factorization

我是编程并尝试学习循环的新手,使用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

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

  

1乘10等于10
  2乘5等于10
  10次​​1等于10

  

1乘10等于10
  5次2等于10
  10次​​1等于10

3 个答案:

答案 0 :(得分:0)

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

此处j位于(0,i)范围内,这意味着,当i1时,j0迭代到1 {1}},当nn时,他们的产品不会10

修复很简单:

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

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

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

答案 1 :(得分:0)

试试这个:

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
  • 的最大因子   
     

请将此代码作为起点,而不是复制粘贴解决方案。

答案 2 :(得分:0)

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

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