2014-12-05 18 views
1

我开始回到python编码,并意识到我无法弄清楚这一点。我试图编写一个素数函数。有人可以帮忙吗?如何在python中找到质数函数

这里是我的代码:

def is_prime(x): 
a = True 
for n in range(2, x-1): 
    while n < x: 
     n+=1 
     if x % n == 0: 
      a = False 
     elif n < 2: 
      a = False 
     else: 
      a = True 
     break 
    break 
return a 

如果任何人有我做错了什么想法,请让我知道。一个月前,我尝试了这一点,无法得到逻辑。我认为我很难过,也从未求助过......此外,在我平均寻求帮助之前,您认为我应该尝试做多久?

+0

你最好检查的范围的定义(A,B,步= 1) ,start = 2,但是n == 0,1在里面... – staticor 2014-12-05 07:30:15

+1

请大家回答后不要实质性编辑问题和代码。 – jonrsharpe 2015-02-10 08:07:48

回答

0
def prime(number): 
    for i in range(2,number,1): 
     if number % i == 0: 
      return False 

    return True 
entry = int(input("Please enter the number: ")) 
while True: 
if prime(entry): 
     print ("It's a prime number. ") 
     continue 
    else: 
     print ("It's not a prime number.. ") 
     continue 

你会输入一个数字,那么这个函数会给你,如果它的素数。检查它将解决您的问题的功能。

ALSO您可以升级程序的速度。你知道素数不可能是偶数,所以你不必检查偶数号码 ,比如4-6-8-26。所以在范围函数中,它是(2,数字)加上“2” 就结束了。像(3,数字,2)那么程序将不会检查偶数。

ALSO一个因子不能大于该数字的平方根。所以你不必检查所有的数字,直到你的主号码,它的 足以检查你的数字平方根。如:(2,数字** 0.5) 意味着从2到您的数字平方根。所以双倍于程序 的速度。

因此函数将是:

def prime(number): 
    for i in range(3,(number**0.5)+1),2): 
     if number % i == 0: 
      return False 
    return True 

第一个功能足以让你实际。我正在处理大量的数据,所以我必须升级我的程序的速度。

+0

更好地改变到(数字** 0.5)+1,或像49这样的数字将被错误地识别为素数,因为该函数将只检查3-6 – user2782067 2014-12-05 07:14:35

+0

是的我只是忘了添加 – GLHF 2014-12-05 07:26:53

1

正如,有人说,你可以通过只检查奇数和使用代码高达上的数码

import math 
def isPrime(num): 
    if(num==1): 
     return False 
    if(num==2): 
     return True 
    if(num%2==0): 
     return False 

    i = 3 
    while(i<math.sqrt(num)+1): 
     if num%i==0: 
      return False 
     i += 2 
    return True 

#do the inputs and check if isPrime 
#print(isPrime(2)) 
0

的开方迭代,并专注于代码结构优化代码:

def is_prime(x): 
    # function contents must be indented 
    if x == 0: 
     return False 
    elif x == 1: 
     return False 
    # your base cases need to check X, not n, and move them out of the loop 
    elif x == 2: 
     return True 
    for n in range(3, x-1): 
     if x % n == 0: 
      return False 
    # only return true once you've checked ALL the numbers(for loop done) 
    return True 

增加了一些优化:

def is_prime(x): 
    if x <= 1: 
     return False 
    if x == 2: 
     return True 
    for n in range(3, x**(0.5)+1, 2): # this skips even numbers and only checks up to sqrt(x) 
     if x % n == 0: 
      return False 
    return True 
0
def is_prime(x): 
    for n in range(2, x-1): 
    if n == 0: 
    return False 
    elif n == 1: 
     return False 
    elif n == 2: 
     return True 
    elif x % n == 0: 
     return False 
    else: 
     return True 

你在做什么错了,前三个if循环中每次执行elif块。所以,他们应该在for循环之外。也。

if x%n==0: 
    return True 

这很好。但后来

else: 
return True 

是错误的,因为每当第一个n不分x时,它将返回复合。因此,

return True 

块必须在for循环之外。 其他优化可以由你自己完成。

0

这是我如何解决它

def is_prime(n): 
    if n==1: 
    print("It's not a Prime number") 
    for z in range(2,int(n/2)): 
    if n%z==0: 
     print("It's not a Prime number") 
     break 

    else: 
    print("It's a prime number") 

,或者如果你想返回一个布尔值

def is_prime(n): 
    if n==1: 
    return False 
    for z in range(2,int(n/2)): 
    if n%z==0: 
     return False 
     break 

    else: 
    return True