如何在Python 3.5.1中打印整数的所有因式分解
我是编程新手,并尝试学习for循环,使用if语句嵌套for循环 我编写此代码是为了生成整数的所有因式分解如何在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 这个有几个问题。首先,它
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等于1010乘以1等于10 这个有几个问题。首先,它忽略了第一个因子分解,即 1乘以10等于10 第二个问题我希望在结果中交换
i
和j
,即它应该说:
1乘以10等于102乘以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