如何在 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
第二个问题我想交换 i
和 j
结果,即它应该说:
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)
范围内,也就是说,当i
为1
时,j
迭代自0
1
,当然他们的乘积不会是 n
当 n
是 10
.
修复很简单:
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)
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 语句
我是编程新手,正在尝试学习 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
第二个问题我想交换 i
和 j
结果,即它应该说:
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)
范围内,也就是说,当i
为1
时,j
迭代自0
1
,当然他们的乘积不会是 n
当 n
是 10
.
修复很简单:
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)
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 语句