Программа для поиска n-го простого числа

Я написал код в 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 -  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 в последней строке, даже если это не так. В чем проблема? Может ли кто-нибудь помочь?

8 Solutions collect form web for “Программа для поиска n-го простого числа”

как насчет использования 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) 

ptrue является локальным для вашего цикла while, который выходит за пределы области действия, как только цикл while заканчивается. поэтому объявите ptrue перед началом вашего внутреннего цикла while

Избавьтесь от 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` 

Вы можете попробовать следующее:

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

Первая часть – это функция, которая вычисляет следующее простое число, заданное любым числом.

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

Все ответы зависят от ввода пользователя, но вот простой код для 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]) 
 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]) 

Попробуйте это, я просто сделал несколько изменений в вашем .

Здесь я проверяю каждое простое число, используя all(num%i!=0 for i in range(2,num)) проверяя его остаток, не равный нулю, поэтому, если это верно для этого диапазона (начиная с 2 и меньше самого себя ) это простое, и для этого функция () помогает мне позже, если ее простое число I увеличивает счетчик «p» и проверяет до «p» меньше, чем «n» (входной номер), поэтому, когда он приравнивает условие nth премьер мы ищем.

 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 
  • Алгоритм AKS Primes в Python
  • Найти первые N простых чисел в python
  • Самый быстрый способ перечислить все простые числа ниже N
  • Быстрое чистое числовое сито в Python
  • Генератор первичного номера вылетает из памяти, если в массиве слишком много чисел
  • Факторизация числа в python
  • Доказательство примитивности сильных вероятных простых чисел
  • Простой первичный генератор в Python
  • Понимание сита эратосфенов в Python
  • isPrime Функция для языка Python
  • Поиск n-го простого числа с использованием Python
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.