程序找到第n个素数

时间:2014-01-08 18:12:08

标签: python loops primes

我在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,即使我不是。这有什么问题......有人可以帮忙吗?

10 个答案:

答案 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