Progtwig para encontrar el nth número primo

Escribí un código en python para encontrar el nth número primo.

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) 

El código me pareció bien, pero devuelve un error cuando lo ejecuto:

  Traceback (most recent call last): File "C:/Users/AV/Documents/Python/nth Prime.py", line 17, in  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 

Me parece que está tratando de decir que me estoy refiriendo a la verdad en la última línea, aunque no lo esté. ¿Cuál es el problema aquí … ¿Alguien puede ayudar?

¿Qué hay de usar Boolean ? e ptrue fuera del 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 es local a su bucle while, que queda fuera del scope tan pronto como finaliza el bucle while. así que declara ptrue antes del inicio de tu bucle while interno

Deshazte de ptrue completo y utiliza else con tu bucle interno. Por ejemplo:

 while mod < (num - 1): if num % (num - mod) == 0: break mod += 1 else: primes += 1 # only executes if loop terminates normally, without `break` 

Puedes probar esto:

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

La primera parte es definir una función que calcula el siguiente número primo dado cualquier número.

 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 

Por ejemplo, is_prime(10) devolverá 11 .

El siguiente paso es escribir un generador que devuelva una lista de números primos.

 def get_prime(k): # generator cnt = 1 n = 2 while cnt <= k: yield(is_prime(n)) n = is_prime(n) + 1 cnt += 1 

Por ejemplo, get_prime(5) devolverá [2,3,5,7,11] .

El siguiente código puede ayudarte a probar los resultados.

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

Todas las respuestas dependen de la entrada del usuario, pero aquí hay un código simple para dar el número n, sin importar qué tan grande sea la 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=int(input('enter n')) a=[2,3,5,7] i=3 j=9 while i 

Prueba esto, acabo de hacer algunos cambios en el tuyo .

Aquí estoy revisando cada número primo usando all(num%i!=0 for i in range(2,num)) verificando que el rest no sea igual a cero, por lo que si es cierto para ese rango (comenzando desde 2 y menos que sí mismo) ) es primo y para eso, toda la función () me ayuda más tarde si es primo. Incremento el recuento ‘p’ y compruebo hasta que ‘p’ sea menor que el ‘n’ (Número de entrada), por lo que cuando iguala la condición es El nth prime que estamos buscando.

 n=raw_input("enter the nth prime ") num=4 p=2 while p