[英]How to find nth prime number in python without using function code?
[英]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.