El programa más simple será seguir la propiedad de los números primos.
Un número primo es un número que es divisible por 1 y el número mismo.
Por lo tanto, dado un número, para encontrar si es primo o no, puede usar la siguiente función,
bool is_prime (int n)
{
int i, cuenta = 0;
si (n == 1)
falso retorno;
si (n == 2)
volver verdadero;
si (n% 2 == 0)
falso retorno;
para (i = 1; i <= n; i ++)
if (n% i == 0) cuenta ++;
if (cuenta == 2) // ¿Por qué?
volver verdadero;
más
falso retorno;
}
¿Por qué?
Te dije que un número primo es un número que es divisible por 1 y el número en sí. Entonces, si el recuento de divisores del número particular es 2, entonces es un número primo (La comprobación del divisor se realiza de [matemática] 1 [/ matemática] a [matemática] n [/ matemática]).
Si desea utilizar esta función para encontrar números primos en un rango dado (bajo, alto).
- ¿Cuál es la complejidad de [matemáticas] T (n) = 2T (n-1) + C? [/ Matemáticas]
- ¿Existe una aplicación de Android que toma datos de entrada y genera una ecuación algebraica?
- ¿Cuál es el cálculo más simple para que un número crezca pero a incrementos más pequeños a medida que aumenta?
- Cómo demostrar que en un torneo round-robin, no más de la mitad de los equipos pueden compartir la puntuación más alta
- ¿Es un orden topológico en el gráfico inverso lo mismo que un orden topológico invertido?
Iterar a través de baja-> alta. Pase todos los números del rango a la función is_prime()
y verifique si es primo o no.
Puede optimizar aún más la función is_prime()
.
No es necesario verificar hasta n para saber si es primo o no. No hay necesidad de contar los divisores. Verificando hasta que la raíz cuadrada de ese número en particular sea suficiente. La implementación a continuación verifica solo hasta la raíz cuadrada de ese número.
bool is_prime (int n)
{
int i, sq, cuenta = 0;
si (n == 1)
falso retorno;
si (n == 2)
volver verdadero;
si (n% 2 == 0)
falso retorno;
sq = sqrt (n);
para (i = 2; i <= sq; i ++)
if (n% i == 0) devuelve falso;
volver verdadero;
}
Pero este no es eficiente para encontrar números primos en un rango dado.
Para encontrar números primos en un rango dado, hay un algoritmo llamado Tamiz de Eratóstenes. Puedes referir eso. Como solicitó el programa más simple , escribí las dos funciones anteriores. El programa eficiente usará
Seive de eratóstenes o segmentado seive de eratóstenes.
Consulte los siguientes enlaces para leer más adelante:
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
http://primesieve.org/segmented_sieve.html