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))