Dado un número natural n, queremos determinar si n es un número primo o no. Sabemos que un número es primo si sólo tiene un divisor propio. Entonces, lo primero que podemos hacer es probar con todos los números entre 2 y n-1, y si alguno divide a n entonces n no es primo.
Otra cosa que conocemos es que el único primo par es el 2, así que si n es par y distinto de dos, entones no es primo; y si es impar entonces ya sabemos que no va a ser divisible por un número par (con esto disminuimos a la mitad la búsqueda).
El último ajuste que hacemos es que si n no es primo, podemos representarlo como el producto de dos números y algunos de los dos es menor o igual que la raíz cuadrada de n (ya que si los dos números son mayores que la raíz de n, el producto será mayor que n). Por esto sólo necesitamos probar con los números impares hasta la raíz de n para saber si n es primo.
Problema ejemplo
Hora Prima
Problema
El reconocido matemático Euler descubrió, entre muchas otras cosas, que la fórmula n2 + n + 41 produce números primos para 0 ≤ n < 40. Para n = 40, la fórmula da el número 1681, que es 41×41. Se sabe que para n ≤ 10 000 000, ¡la fórmula produce un número primo el 47.5% de la veces! Así que deberás escribir un programa que encuentre cuantos primos produce la fórmula en cierto intervalo.
Entrada
Cada línea de entrada cuenta con dos enteros a y b, tales que 0 ≤ a ≤ b ≤ 10 000. Deberás leer hasta el fin de línea.Salida
Para cada pareja (a, b) leída, deberás escribir el porcentaje de números primos que encuentra la fórmula en éste intervalo (a ≤ n ≤ b), redondeado a dos decimales.Solución: Simplemente hay que recorrer el intervalo, contar la cantidad de primos y calcular el porcentaje. Como se van a procesar varias (probablemente muchas) entradas, algo útil es primero calcular todos los valores que puede tomar n y guardar en un arreglo los resultados.
Código
De las líneas 1 a 3 tenemos la declaración de variables: a y b determinan el intervalo a analizar, t la usamos para guardar valores temporales, i es una variable para ciclos y s es un arreglo donde guardamos cuantos primos hemos encontrado hasta n.
La función primo toma como entrada un número natural y devuelve true si el número es primo o false si es compuesto. En las líneas 6 y 7 tenemos las variables: i es una variable para ciclos y res es el resultado de la función. En la línea 9 inicializamos las variables, empezamos suponiendo que el número es primo y comenzamos a contar desde el tres. En la línea 10 quitamos los números pares y el uno, ya que sabemos que no son primos, y el único par que dejamos es el dos. Después recorremos todos los impares hasta la raíz de n, si alguno de ellos divide a n entonces es un número compuesto y nos salimos del ciclo (líneas 11 a la 15). Para terminar, en la línea 16 asignamos el resultado a la función.
Casos ejemplo
Entrada: | 151 |
Desarrollo: | 151 ≡ 1 mod 2 151 ≡ 1 mod 3 151 ≡ 1 mod 5 151 ≡ 4 mod 7 151 ≡ 7 mod 9 151 ≡ 8 mod 11 132 > 151 |
Salida: | True |
Entrada: | 403 |
Desarrollo: | 403 ≡ 1 mod 2 403 ≡ 1 mod 3 403 ≡ 3 mod 5 403 ≡ 4 mod 7 403 ≡ 7 mod 9 403 ≡ 7 mod 11 403 ≡ 0 mod 13 |
Salida: | False |
Nota: Las entradas y salidas corresponden a las de la función Primo y no a las del problema.
Código en C
Tiempo de ejecución
Lenguaje | Fecha | Tiempos [s] | Memoria [Kb] | |||
---|---|---|---|---|---|---|
Ejecución | Mejor | Mediana | Peor | |||
Pascal | 13-Ene-2006 | 0.480 | 0.000 | 0.596 | 9.812 | 328 |
C | 02-Feb-2006 | 0.290 | 436 |