#include #include typedef int(*I2I)(int); typedef struct { int a, b; } Pair; Pair brent(I2I f, int x0) { int pow = 1, lam = 1, tortue = x0, lievre, mu, i; Pair result; lievre = (*f)(x0); while (tortue != lievre) { if (pow == lam) { tortue = lievre; pow = pow * 2; lam = 0; } lievre = (*f)(lievre); lam++; } lievre = x0; i = 0; while (i < lam) { lievre = (*f)(lievre); i++; } tortue = x0; mu = 0; while (tortue != lievre) { tortue = (*f)(tortue); lievre = (*f)(lievre); mu++; } result.a = lam; result.b = mu; return result; } int lambda(int x) { return (x*x+1 ) % 255; } int main() { int x0, x, i; Pair result; x0 = 3; x = x0; printf("[%d", x0); for (i = 1; i <= 100; ++i) { x = lambda(x); printf(", %d", x); } printf("]\n"); result = brent(lambda, x0); printf("Longueur du cycle = %d\nIndex début du cycle = %d\nCycle = [", result.a, result.b); x0 = 3; x = x0; for (i = 1; i <= result.b; ++i) { x = lambda(x); } for (i = 1; i <= result.a; ++i) { if (i > 1) { printf(", "); } printf("%d", x); x = lambda(x); } printf("]\n"); return 0; }