Python 2.7 检查一个数的素数因子
在这里,我遇到了一个检查素数因子的问题Python 2.7 检查一个数的素数因子,python-2.7,Python 2.7,在这里,我遇到了一个检查素数因子的问题 # 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 i
# 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。
如何更改代码以实现目标?以下是检查素数与否的代码。您可以根据需要进行修改
prime_numbers = 0
def is_prime_number(x):
if x >= 2:
for y in range(2,x):
if not ( x % y ):
return False
else:
return False
return True
for i in range(int(raw_input("How many numbers you wish to check: "))):
if is_prime_number(i):
prime_numbers += 1
print i
print "We found " + str(prime_numbers) + " prime numbers."
您只需将返回值从循环中移出,就可以检查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,)
如果x%j==0有余数,则无论何时都将返回True
,这样就不会根据所有数字检查x。另外,不要使用输入获取用户输入,使用原始输入转换为int,即num=int(原始输入())
一种更有效的方法是尝试一下,它将帮助您获得ans:
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
输出--
仅以vikram singh chandel的答案为基础,这是一个简短的解决方案,最终避免了双for循环。我们只需要附加素数因子: 编辑:对直接输入素数进行了小改动
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
def isprime(x):
如果x<2:
返回错误
对于范围(2,x)内的k:
如果x%k==0:
返回错误
返回真值
num=输入(“请输入一个数字:”)
因子=[]
对于范围内的i(1,num+1):
如果num%i==0且isprime(i):
因素。附加(i)
打印“因子:”,因子
def iPrime(n):
isDivisible=False
i=2
虽然我可以在我的代码中找到素数,但我希望找到素数的最小因子并打印出来。最小还是最小?我通过改变条件得到了结果。非常感谢:)对不起,我的问题不够精确。我希望找到一个数的素因子。3和5是45的主要因素,但9和15不是。现在,我的代码可以找到所有的因素,但不能找到素数。我找到了一种方法来实现我的目标,在最后2行中改变一个循环如果isprime(i)和num%i==0:@charleuctai,我添加了一个指向我的另一个答案的链接,这将比您当前的方法更有效。太好了,我也对我的代码做了一点小改动,然后它就可以工作了。@charleuctai太好了,我认为我的ans也是正确的,但人们还是给了我否决票,做得很好。从2
到sqrt(x)查找素数
使用Eratosthenes筛,然后仅迭代这些素数;一旦你找到一个因子,你就可以除以它。
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
def isPrime(n):
isDivisible = False
i=2
while i<n:
if n%i == 0:
isDivisible = True
i += 1
if isDivisible == False:
return True
#print(n," is a prime number!")
else:
return False
#print(n,: is not a prime number!")
import pdb
def primeFactors(n):
lst = []
while n>1:
#pdb.set_trace()
for i in range(2,n+1):
if isPrime(i) and (n%i==0):
#pdb.set_trace()
lst.append(i)
n = n//i
return lst
x = int(input("Enter a number: "))
print("The Prime Factors of the entered number are: ",primeFactors(x))