program print prime number code calculate python primes

print - Comprobador de número Python Prime



print prime numbers python (14)

Esta pregunta ya tiene una respuesta aquí:

He intentado escribir un programa que tomará un número impugnado, y verifico si es un número primo. El código que he hecho hasta ahora funciona perfectamente si el número es de hecho un número primo. Si el número no es un número primo, actúa de manera extraña. Me preguntaba si alguien podría decirme cuál es el problema con el código.

a=2 num=13 while num > a : if num%a==0 & a!=num: print(''not prime'') a=a+1 else: print(''prime'') a=(num)+1

el resultado dado cuando se ingresa 24 es: no primer no primer no primer primo

¿Cómo puedo solucionar el error con el informe principal en cada impar y no primo para cada par


Comprobación de número primo.

def is_prime(x): if x < 2: return False else: if x == 2: return True else: for i in range(2, x): if x % i == 0: return False return True x = int(raw_input("enter a prime number")) print is_prime(x)


Debes dejar de iterar una vez que sabes que un número no es primo. Agregue un break una vez que encuentre primer para salir del ciclo while.

Realizando solo cambios mínimos a su código para que funcione:

a=2 num=13 while num > a : if num%a==0 & a!=num: print(''not prime'') break i += 1 else: # loop not exited via break print(''prime'')

Tu algoritmo es equivalente a:

for a in range(a, num): if a % num == 0: print(''not prime'') break else: # loop not exited via break print(''prime'')

Si lo aplica a una función, puede prescindir de break y for-else:

def is_prime(n): for i in range(3, n): if n % i == 0: return False return True

Incluso si vas a usar la fuerza bruta para el primer como este, solo necesitas iterar hasta la raíz cuadrada de n . Además, puede omitir la prueba de los números pares después de dos.

Con estas sugerencias:

import math def is_prime(n): if n % 2 == 0 and n > 2: return False for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True

Tenga en cuenta que este código no maneja correctamente 0 , 1 y números negativos.

Hacemos esto más simple al usar all con una expresión de generador para reemplazar el for-loop.

import math def is_prime(n): if n % 2 == 0 and n > 2: return False return all(n % i for i in range(3, int(math.sqrt(n)) + 1, 2))


Después de determinar que un número es compuesto (no primo), su trabajo está hecho. Puedes salir del loop con break .

while num > a : if num%a==0 & a!=num: print(''not prime'') break # not going to update a, going to quit instead else: print(''prime'') a=(num)+1

Además, puede probar y familiarizarse con algunos constructos en Python. Su lazo se puede acortar a un trazador de líneas que todavía lee bien en mi opinión.

any(num % a == 0 for a in range(2, num))


Empieza aquí, así que por favor avíseme si estoy de acuerdo, pero lo haría así:

def prime(n): count = 0 for i in range(1, (n+1)): if n % i == 0: count += 1 if count > 2: print "Not a prime" else: print "A prime"


Esta es una ligera variación en que mantiene un registro de los factores.

def prime(a): list=[] x=2 b=True while x<a: if a%x==0: b=False list.append(x) x+=1 if b==False: print "Not Prime" print list else: print "Prime"


Este ejemplo es use reduce (), pero lo desacelera:

def makepnl(pnl, n): for p in pnl: if n % p == 0: return pnl pnl.append(n) return pnl def isprime(n): return True if n == reduce(makepnl, range(3, n + 1, 2), [2])[-1] else False for i in range(20): print i, isprime(i)

Utiliza Sieve Of Atkin , más rápido que arriba:

def atkin(limit): if limit > 2: yield 2 if limit > 3: yield 3 import math is_prime = [False] * (limit + 1) for x in range(1,int(math.sqrt(limit))+1): for y in range(1,int(math.sqrt(limit))+1): n = 4*x**2 + y**2 if n<=limit and (n%12==1 or n%12==5): # print "1st if" is_prime[n] = not is_prime[n] n = 3*x**2+y**2 if n<= limit and n%12==7: # print "Second if" is_prime[n] = not is_prime[n] n = 3*x**2 - y**2 if x>y and n<=limit and n%12==11: # print "third if" is_prime[n] = not is_prime[n] for n in range(5,int(math.sqrt(limit))): if is_prime[n]: for k in range(n**2,limit+1,n**2): is_prime[k] = False for n in range(5,limit): if is_prime[n]: yield n def isprime(n): r = list(atkin(n+1)) if not r: return False return True if n == r[-1] else False for i in range(20): print i, isprime(i)


Esto haría el trabajo:

number=int(raw_input("Enter a number to see if its prime:")) if number <= 1: print "number is not prime" else: a=2 check = True while a != number: if number%a == 0: print "Number is not prime" check = False break a+=1 if check == True: print "Number is prime"


Los dos problemas principales con su código son:

  1. Después de designar un número no principal, continúa verificando el resto de los divisores aunque ya sepa que no es primo, lo que puede llevarlo a imprimir "primero" después de imprimir "no primero". Sugerencia: use la declaración `break ''.
  2. Usted designa un número principal antes de haber comprobado todos los divisores que debe verificar, porque está imprimiendo "primo" dentro del ciclo. Por lo tanto, obtiene "primo" varias veces, una para cada divisor que no va uniformemente al número que se está probando. Sugerencia: use una cláusula else con el ciclo para imprimir "primero" solo si el ciclo sale sin romperse.

Un par de ineficiencias bastante significativas:

  1. Debes hacer un seguimiento de los números que ya has encontrado que son primos y solo dividir por esos. ¿Por qué dividir por 4 cuando ya has dividido por 2? Si un número es divisible por 4, también es divisible por 2, por lo que ya lo hubieras atrapado y no hay necesidad de dividir entre 4.
  2. Solo necesita probar hasta la raíz cuadrada del número que se está probando porque cualquier factor más grande que eso tendría que multiplicarse con un número más pequeño que eso, y eso ya habría sido probado para cuando llegue al más grande.

Tu problema es que el bucle continúa funcionando aunque ya hayas tomado una decisión. Debe agregar el break línea después de a=a+1


# is digit prime? we will see (Coder: Chikak)

def is_prime(x): flag = False if x < 2: return False else: for count in range(2, x): if x % count == 0: flag = True break if flag == True: return False return True


a=input("Enter number:") def isprime(): total=0 factors=(1,a)# The only factors of a number pfactors=range(1,a+1) #considering all possible factors if a==1 or a==0:# One and Zero are not prime numbers print "%d is NOT prime"%a elif a==2: # Two is the only even prime number print "%d is prime"%a elif a%2==0:#Any even number is not prime except two print "%d is NOT prime"%a else:#a number is prime if its multiples are 1 and itself #The sum of the number that return zero moduli should be equal to the "only" factors for number in pfactors: if (a%number)==0: total+=number if total!=sum(factors): print "%d is NOT prime"%a else: print "%d is prime"%a isprime()


def is_prime(n): return all(n%j for j in xrange(2, int(n**0.5)+1)) and n>1


def isprime(n): ''''''check if integer n is a prime'''''' # make sure n is a positive integer n = abs(int(n)) # 0 and 1 are not primes if n < 2: return False # 2 is the only even prime number if n == 2: return True # all other even numbers are not primes if not n & 1: return False # range starts with 3 and only needs to go up # the square root of n for all odd numbers for x in range(3, int(n**0.5) + 1, 2): if n % x == 0: return False return True

Tomado de:

http://www.daniweb.com/software-development/python/code/216880/check-if-a-number-is-a-prime-number-python


max=int(input("Find primes upto what numbers?")) primeList=[] for x in range(2,max+1): isPrime=True for y in range(2,int(x**0.5)+1) : if x%y==0: isPrime=False break if isPrime: primeList.append(x) print(primeList)