jueves, 8 de septiembre de 2016

Código en C del test de primalidad basado en la división

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