我在python中编写了一个代码来查找第n个素数。
print("Finds the nth prime number")
def prime(n):
primes = 1
num = 2
while primes <= n:
mod = 1
while mod < (num - 1):
ptrue = 'true'
if num%(num-mod) == 0:
ptrue = 'false'
break
mod += 1
if ptrue == 'true':
primes += 1
return(num)
nth = int(input("Enter the value of n: "))
print(prime(nth)
代码看起来很好,但是当我运行它时会返回错误:
Traceback (most recent call last):
File "C:/Users/AV/Documents/Python/nth Prime.py", line 17, in <module>
print(prime(nth))
File "C:/Users/AV/Documents/Python/nth Prime.py", line 13, in prime
if ptrue == 'true':
UnboundLocalError: local variable 'ptrue' referenced before assignment
在我看来,好像它试图说我在最后一行指的是ptrue,即使我不是。这有什么问题......有人可以帮忙吗?
答案 0 :(得分:1)
ptrue是while循环的本地,一旦while循环结束,它就会超出范围。所以在内部while循环开始之前声明ptrue
答案 1 :(得分:1)
完全摆脱ptrue
并使用内部循环else
。例如:
while mod < (num - 1):
if num % (num - mod) == 0:
break
mod += 1
else:
primes += 1 # only executes if loop terminates normally, without `break`
答案 2 :(得分:0)
你可以试试这个:
#This program finds nth prime number
import math
def is_prime(number):
if number < 2:
return False
if number % 2 == 0:
return False
else:
for i in range(3, number):
if not number % i:
return False
return True
n = input('Enter n: ')
#This array stores all the prime numbers found till n
primes = []
for i in range(100000):
if is_prime(i):
primes.append(i)
if len(primes) == n:
break
print("nth prime number is: " + str(primes[n-1]))
答案 3 :(得分:0)
第一部分是定义一个函数,该函数计算给定任何数字的下一个素数。
import math
def is_prime(x): # function
for i in range(2,int(math.sqrt(x))+1):
if x%i == 0:
return is_prime(x+1)
return x
例如,is_prime(10)
将返回11
。
下一步是编写一个返回素数列表的生成器。
def get_prime(k): # generator
cnt = 1
n = 2
while cnt <= k:
yield(is_prime(n))
n = is_prime(n) + 1
cnt += 1
例如,get_prime(5)
将返回[2,3,5,7,11]
。
以下代码可以帮助您测试结果。
a = get_prime(50)
lists = list(a)[:]
for idx, value in enumerate(lists):
print("The {idx}th value of prime is {value}.".format(idx = idx+1, value = value))
答案 4 :(得分:0)
所有答案都取决于用户输入,但这里有一个简单的代码来给出第n个数字,无论n有多大......
def isprime(n): # First the primality test
if n<2:
return False
for i in range(2,n):
if n%i==0:
return False
break
else:
return True
def nthprime(n): # then generic code for nth prime number
x=[]
j=2
while len(x)<n:
if (isprime(j)) == True:
x.append(j)
j =j+1
print(x[n-1])
答案 5 :(得分:0)
n=int(input('enter n'))
a=[2,3,5,7]
i=3
j=9
while i<n:
flag=0
j=j+2
for k in range(len(a)):
if (a[k]<=int(j**0.5) and j%a[k]==0):
flag=1
break
if flag==0:
a=a+[j]
i=i+1
print(a[n-1])
答案 6 :(得分:0)
尝试一下。
n = int(input())
count=1
u=2
prime=[]
while(count<=n):
temp=0
for i in range(2,u):
if(u%i==0):
temp=1
if(temp==0):
count+=1
prime.append(u)
u+=1
print(prime[-1])
答案 7 :(得分:0)
寻找第 n 个质数的程序。
def nth_Prime(num):
Semi = num*num
Res_1 = [True for i in range(Semi+1)]
prime = 2
while prime*prime <= Semi:
if Res_1[prime] == True:
for i in range(prime*prime, Semi+1, prime):
Res_1[i] = False
prime += 1
Res_2 = []
for i in range(2, Semi+1):
if Res_1[i]:
Res_2.append(i)
return Res_2[num-1]
if __name__ == "__main__":
num = int(input("Enter nth Number: "))
print(nth_Prime(num))
答案 8 :(得分:-1)
如何使用Boolean
?并从ptrue
while loop
print("Finds the nth prime number")
def prime(n):
primes = 1
num = 2
while primes <= n:
mod = 1
ptrue = True
while mod < (num - 1):
if num%(num-mod) == 0:
ptrue = False
break
mod += 1
if ptrue == True:
primes += 1
return(num)
nth = int(input("Enter the value of n: "))
print prime(nth)
答案 9 :(得分:-1)
尝试一下,我刚刚对你进行了一些修改。
这里我正在检查每个素数,使用all(num%i!=0 for i in range(2,num))
检查其余数不等于零,所以如果它对于该范围是真的(从2开始并且小于它自己)它是一个素数而且对于所有( )函数可以帮助我以后如果它是一个素数我增加了&#39; p&#39;计算并检查直到&#39; p&#39;小于&#39; n&#39;(输入数字)所以当它等于条件时它是我们正在寻找的第n个素数。
n=raw_input("enter the nth prime ")
num=4
p=2
while p <int(n):
if all(num%i!=0 for i in range(2,num)):
p=p+1
num=num+1
print "nTH prime number: ",num-1