Voici un petit exemple avec quelques calculs sur des entiers multi-précision.
#include<gmp.h>
#include<stdio.h>
/*
Place la factorielle de n dans res. res doit etre initialise
*/
void factorielle(long n, mpz_t res)
{
mpz_t temp;
if (n == 0)
{
mpz_set_ui(res, 1);
}
else
{
mpz_init(temp);
factorielle(n-1, temp);
mpz_mul_si(res, temp , n);
mpz_clear(temp);
}
}
/*
Place b^n dans res. res doit etre initialise
*/
void puissance(long b, long n, mpz_t res)
{
mpz_t temp;
if (n == 0)
{
mpz_set_ui(res, 1);
}
else
{
mpz_init(temp);
puissance(b, n-1, temp);
mpz_mul_ui(res, temp, b);
mpz_clear(temp);
}
}
/*
Affiche les 100 premieres puissances de 10.
*/
int main()
{
mpz_t i;
long ind;
mpz_init(i);
for(ind = 0 ; ind <= 100 ; ind++)
{
puissance(10, ind, i);
mpz_out_str(NULL, 10, i);
printf("\n");
}
mpz_clear(i);
return 0;
}
Et voici, pour vous éviter de vous prendre la tête, le makefile.
all : testGMP.c gcc -Wall -lgmp testGMP.c run: all ./a.out