Am si eu nevoie de un pic de ajutor la problema asta. Am gasit ca bugul provine la procedura de aflare a perioadei (perioada trece de M):
void Find_Period ()
{
Perioada = 1;
i = (A * X0 + B) % M;
while (i != X0)
{
i = (A * i + B) % M;
Perioada++;
}
}
Am demonstrat intai ca intregul graf X0 -> X1 -> X2 ->... este finit (si ciclic) si ca este defapt de forma X0, X1, X2 ... Xn, X0 din faptul ca daca 2 noduri pointeaza la un acelasi nod (exista o bucla interioara) atunci vom avea Xk == (A * Xi + B) % M == (A * Xj + B) % M, deci A * (Xj - Xi) = n * M, unde n este un nr. intreg, deci Xj - Xi == 0. Deci ar trebui ca sirul sa se inchida fara a exista vreo bucla interioara. Ce gresesc?
LE: NVM, dupa vreo 2 ore, mi-am dat seama ca era de la un long long declarat int.