繁体   English   中英

如何在python中找到素数函数

[英]how to find a prime number function in 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

如果有人知道我做错了什么,请告诉我。 一个月前,我尝试过这个,但无法理解逻辑。 我想我被难住了,从来没有寻求过帮助......另外,你认为我应该在寻求帮助之前尝试多久?

如前所述,您可以通过检查奇数并迭代到 num 的 sqrt 来优化代码

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

您将输入一个数字,然后此功能会告诉您它是否为素数。 检查它将解决您的问题的功能。

可以升级你的程序的速度。 您知道质数不可能是偶数,因此您不必检查偶数,例如 4-6-8-26。 所以在范围函数中,即 (2,number) 在它的末尾添加“2”。 像 (3,number,2) 那么程序不会检查偶数。

另外一个因子不能大于该数字的平方根。 所以你不必在你的主号码之前检查所有数字,它足以检查你的数字平方根。 像: (2,number**0.5) 这意味着从 2 到您的数字平方根。 所以程序速度加倍。

所以函数将是:

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

第一个功能对你来说已经足够了。 我正在处理庞大的数字,所以我必须升级我的程序的速度。

使用您的代码,并专注于代码结构:

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
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,它就会返回 Composite。 所以,

return True 

块必须在 for 循环之外。 其他优化可自行完成。

这就是我解决它的方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM