这里我遇到了检查素数因子的问题
# using python2.7.10
from math import sqrt
def isprime(x):
if x == 1:
return False
k = int(sqrt(x))
for j in range(2,k+1):
if x%j == 0:
return False
return True
num = input("please input a number:")
for i in range(2, num):
if i!= num and num % i == 0:
print i,
如果输入数字45,则打印出3,5,9,15。然而,3是因子9和15,5是15的因子。我希望结果是3,5。 如何更改代码以实现目标?
答案 0 :(得分:0)
你只需要将返回True 移出循环,所以你检查2-k的所有数字:
from math import sqrt
def isprime(x):
if x == 1:
return False
k = int(sqrt(x))
for j in range(2,k+1):
if x % j == 0:
return False
return True # if you get here, you have checked all 2-k
num = int(raw_input("please input a number:"))
for i in range(2, num):
if isprime(i) and num % i == 0:
print(i,)
return True
只要if x % j == 0
有剩余时间,num = int(raw_input())
您就不会对所有数字进行x检查。此外,不使用输入来获取用户输入,使用 raw_input 转换为int app.component.ts
。
更有效的方式来做你想要的是here
答案 1 :(得分:0)
试试这个,它会帮助你获得你的答案:
def isprime(x):
if x >= 2:
for k in range(2,x):
if x%k==0:
return False
return True
else:
return False
num = input("please input a number:")
factor=[]
prime_factor=[]
for i in range(2, num):
if num % i == 0:
factor.append(i)
for k in factor:
if isprime(k):
prime_factor.append(k)
print 'Factors',factor
print 'Prime Factors',prime_factor
输出 -
please input a number:45
Factors [3, 5, 9, 15]
Prime Factors [3, 5]
答案 2 :(得分:0)
[['a', 'c', 'b'], ['F', 'P', 'Z', 'W'], ['R', 'X', 'N']]
答案 3 :(得分:-1)
这是检查素数的代码。您可以根据需要进行修改
XX
答案 4 :(得分:-1)
只是稍微建立一下vikram singh chandel的答案,这是一个更短的解决方案,最终避免了双循环。我们只需要附加素数因子:
编辑:直接输入素数的次要更改。
def isprime(x):
if x < 2:
return False
for k in range(2, x):
if x % k == 0:
return False
return True
num = input("please input a number:")
factors = []
for i in range(1, num + 1):
if num % i == 0 and isprime(i):
factors.append(i)
print 'Factors:', factors