2014-01-08 52 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])