Skip to content
Snippets Groups Projects
Commit 493a9652 authored by Amelie Phok's avatar Amelie Phok
Browse files

fonction rho_pollard

parent f5b6f3bb
No related branches found
No related tags found
No related merge requests found
#include <stdio.h>
#include <stdlib.h>
#include "bignum.h"
#include "list.h"
unsigned long int gcd(unsigned long int a, unsigned long int b){
unsigned long int old_r, r = 1;
......@@ -16,6 +18,42 @@ unsigned long int gcd(unsigned long int a, unsigned long int b){
return old_r;
}
unsigned long int f(unsigned long int x){
return x*x+1l;
}
unsigned long int rho_pollard(unsigned long int n){
list_t l = list_empty();
list_t head = list_empty();
unsigned long int xk, i = 2l;
unsigned long int* j;
j = malloc(sizeof(unsigned long int));
*j = i;
l = list_push(l,j);
for(;;){
i = f(i)%n;
head = l;
while(!list_is_empty(l)){
xk = *((unsigned long int*)(l->val));
if(i == xk){
l = l->next;
}
if(gcd(xk-i,n) != 1)
return gcd(xk-i,n);
else
l = l->next;
}
j = malloc(sizeof(unsigned long int));
*j = i;
l = list_push(head,j);
}
}
unsigned long int floyd(unsigned long int n);
int main() {
// En utilisant l'algorithme rho de Pollard, factorisez les entiers suivants
......@@ -40,8 +78,18 @@ int main() {
printf("PGCD(42,24) = %lu\n", gcd(42,24));
printf("PGCD(42,24) = %s\n", bignum_to_str(bignum_gcd(bignum_from_int(42),bignum_from_int(24))));
//printf("PGCD(42,24) = %lu\n", gcd(42,24));
//printf("PGCD(42,24) = %s\n", bignum_to_str(bignum_gcd(bignum_from_int(42),bignum_from_int(24))));
printf("Rho Pollard 1 = %lu\n", rho_pollard(n1));
printf("Rho Pollard 2 = %lu\n", rho_pollard(n2));
printf("Rho Pollard 3 = %lu\n", rho_pollard(n3));
printf("Rho Pollard 4 = %lu\n", rho_pollard(n4));
printf("Rho Pollard 5 = %lu\n", rho_pollard(n5));
printf("Rho Pollard 6 = %lu\n", rho_pollard(n6));
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment