我是编程并尝试学习循环的新手,使用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
答案 0 :(得分:0)
for i in range(0,n+1):
for j in range(0,i):
此处j
位于(0,i)
范围内,这意味着,当i
为1
时,j
从0
迭代到1
{1}},当n
为n
时,他们的产品不会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语句