Skip to content
Extraits de code Groupes Projets
Valider ecfa610b rédigé par Raphaël Ngenyi-Ngondo's avatar Raphaël Ngenyi-Ngondo
Parcourir les fichiers

Spé unit_64 modpow

parent d3ff1ba1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #8336 réussi
...@@ -43,10 +43,13 @@ queue_t *get_from_buffer_2(struct buffer_cw *buf){ // trouver un element ...@@ -43,10 +43,13 @@ queue_t *get_from_buffer_2(struct buffer_cw *buf){ // trouver un element
int is_div(uint_64 number, uint_64 i) { // Vérifie si i est un diviseur de number. int is_div(uint_64 number, uint_64 i) { // Vérifie si i est un diviseur de number.
if (i == 0){return 0;} if (i == 0){return 0;}
return (number % i == 0) ; // renvoie 0 si le nombre n'est pas divisible par i et 1 si il est divisible return (number % i == 0) ; // renvoie 0 si le nombre n'est pas divisible par i et 1 si il est divisible
} }
/*
exponentiation modulaire : calcul plus rapidement des grandes puissances entières
*/
uint_64 modpow (uint_64 base, uint_64 exp, uint_64 mod){ uint_64 modpow (uint_64 base, uint_64 exp, uint_64 mod){
uint_64 result = 1; uint_64 result = 1;
...@@ -59,7 +62,7 @@ uint_64 modpow (uint_64 base, uint_64 exp, uint_64 mod){ ...@@ -59,7 +62,7 @@ uint_64 modpow (uint_64 base, uint_64 exp, uint_64 mod){
exp >>= 1; exp >>= 1;
base = (base * base) % mod; base = (base * base) % mod;
} }
return result; return result;
} }
uint_64* randomiser (int k, uint_64 N){ uint_64* randomiser (int k, uint_64 N){
...@@ -72,11 +75,11 @@ uint_64* randomiser (int k, uint_64 N){ ...@@ -72,11 +75,11 @@ uint_64* randomiser (int k, uint_64 N){
result[i] = rand() % (N-1) +1; result[i] = rand() % (N-1) +1;
} }
return result; return result;
} }
int is_prime (uint_64 number){ int is_prime (uint_64 number){
uint_64 *random; uint_64 *random;
int k; int k;
if (number <= 20){k = number-1;} if (number <= 20){k = number-1;}
...@@ -85,18 +88,18 @@ int is_prime (uint_64 number){ ...@@ -85,18 +88,18 @@ int is_prime (uint_64 number){
for (int i = 0; i < k; i++) for (int i = 0; i < k; i++)
{ {
if (modpow(random[i],number-1,number) == 1) if (modpow(random[i],number-1,number) == 1)
{ {
continue; continue;
} }
else{ else{
free(random); free(random);
return 0; return 0;
} }
} }
free(random); free(random);
return 1; return 1;
} }
void enqueue(queue_t* q, uint_64 val){ void enqueue(queue_t* q, uint_64 val){
...@@ -241,7 +244,7 @@ void *calculating(void *param){ ...@@ -241,7 +244,7 @@ void *calculating(void *param){
sem_post(&full2); sem_post(&full2);
free(chaine); free(chaine);
} }
} }
return NULL; return NULL;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter