2014-01-08 116 views
1

我在python中编写了一个代码来找到第n个素数。程序找到第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在我看来,即使我不是。这里有什么问题......任何人都可以帮忙吗?

+2

你只需要添加'ptrue =“true”'到while循环的顶部 –

+0

谢谢,这确实解决了这个问题,但是我的代码似乎没有工作......它只是为每个n的值打印出2 ...什么有这个吗? – AvZ

+0

你从来没有从其''2'的初始值改变num。 –

回答

-1

如何使用Boolean?和initalize ptruewhile 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) 
+0

布尔事物不起作用。现在每件事都很好。谢谢! – AvZ

+0

如果你不更新“num”,这怎么能工作? – megido

1

ptrue是本地的while循环,其一旦while循环结束超出范围。所以在内部while循环开始之前声明ptrue

+0

虽然这可以解决他的错误...它需要被初始化为true,因为没有在哪里设置它为真只有假(IE他假设为true并证明是false) –

+1

必须设置ptrue在内部while循环开始之前为true – praveen

+0

ahhh好点...误读(以为你的意思是outter while循环) –

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` 
-1

尝试了这一点,我只是做在你一些变化。

我在这里检查使用all(num%i!=0 for i in range(2,num))检查其不等于零其余所以如果是该范围(从2,低于本身出发)真正的每一个素数是素数和所有()函数稍后会帮助我,如果它的素数增加'p'计数并检查直到'p'小于'n'(输入数字),所以当它将条件等同于我们正在寻找的第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 
+1

尽管此代码片段可能会解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – andreas

+0

当然会记住这个事情为未来:) – shiva2492

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

第一部分是定义用于计算给定任意数量的下一个素数的函数。例如,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)) 
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]) 
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])