En un post anterior https://mathengineering.blogspot.com.es/2016/08/test-de-primalidad-i-primeros-metodos.html
Se comentaron los test de primalidad elementales, uno de ellos el más fiable y a la vez más costoso computacionalmente es el denominado Test de la división.
Pues bien aqui os dejo el código en C se han usado sólo las funciones de las API's estandar de ANSI C , por lo que el programa en C tiene menor alcance para realizar test que si usaramos la biblioteca GMP. con la que es posible manejar enteros de precisión arbitraria.
Pues bien el código en C es :
// programa para aplicar test de primalidad elementales
// limitado a un valor de tipo unsigned long
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define MAX_LONG 429467295
int main(void)
{
unsigned long numero_test;
unsigned long raiz;
unsigned int i;
unsigned int contador_compuesto=0;
do
{
printf("Introduce el numero "); // control del máximo valor a introducir
scanf("%li", &numero_test);
} while (numero_test>=MAX_LONG);
raiz=(int) sqrt(numero_test); // valor limite de los valores a usa
for (i=3;i<=raiz;i=i+2)
{
if ((numero_test%2)==0 ||(numero_test%i)==0)
{
contador_compuesto++; // solo con que aparezca un compuesto paramos la busqueda
break;
}
}
if (contador_compuesto>=1)
{
printf("El numero %u es compuesto\n ",numero_test);
printf("El divisor menor es el %u ",i);
}
else
{
printf("El numero %u es primo ",numero_test);
}
}
Java implementa la clase BigInteger, de serie, pero eso lo vemos otro día
No hay comentarios:
Publicar un comentario