Test de Rabbin Miller (nombre premier)

Petit code effectuant le test de Rabbin-Miller utilisant la librairie de calcul gmp
static int rabbin(int a_, mpz_t p){ mpz_t temp; mpz_t r; mpz_t a; mpz_t q; mpz_t pm; mpz_t i; int moinsUn = 0; mpz_init(temp); mpz_init_set(r,p); mpz_init_set(pm,p); mpz_sub_ui(pm,pm,1); mpz_init_set_ui(a,a_); mpz_init_set_ui(q,0); mpz_sub_ui(r,r,1); do{ mpz_cdiv_q_2exp(r,r,1); mpz_mod_ui(temp, r, 2); mpz_add_ui(q,q,1); }while (mpz_cmp_ui(temp,0) == 0); /** * Nous avons q = r2^{pp} */ mpz_powm (a, a, r, p); if(mpz_cmp_ui(a, 1) == 0){ return 0; /* le nombre est considere comme premier */ } mpz_init_set_ui(i,0); while(mpz_cmp(i, q) < 0){ mpz_powm_ui(a,a,2,p); if(mpz_cmp(a, pm) == 0){ moinsUn = 1; }else if(mpz_cmp_ui(a, 1) == 0){ if(moinsUn == 1 || i == i){ return 0; /* le nombre est considere comme premier */ }else{ return -1; /* compose */ } } mpz_add_ui(i,i,1); } return -1; }
Domaine:
Commentaires
static ?
static ?
Le mot clef static devant
Le mot clef static devant une fonction permet de dire au compilateur qu'elle n'est visible que dans le fichier ou elle est
--
2B G33K || !2B
2B G33K || !2B