aLGORYTM
MISIO: Witam! Mam problem z pewnym algorytmem − testem Lehmera. Sprawdza on czy Mp=2p − 1 jest
pierwsze jeśli p jest pierwsze. Algorytm wygląda tak:
Zadanie czysto matematyczne. nie mam pojecia jak zrobić zeyb rownie dzialalo, a zeby zmienna s
nie przyjmowala takiej duzej wartosci.
s=4;
for(i=1; i<=p−2; i++)
{
s=((s*s)−2)%Mp;
}
if(s==0)cout<<"Liczba jest pierwsza";
gdzie Mp=2p − 1;
a, p to jest potęga do której została podniesiona 2. I problem jest taki, że w c++ oznaczam
wszystkie zmienne unsigned long long int. Czyli liczby mieszczą się w przedziale do 263 −
1. Ale algorytm wypisuje mi tylko liczbę 231 − 1, ale wiem że liczba 261 − 1 też jest
pierwsza, tylko że jej mi już nie wypisuje, a powinno. Myślę, że to dlatego, że przy s*s
liczby może wychodzić poza zakres. I wtedy skraca mi liczbę i dzieli tak, że nie wychodzi.
Idzie jakoś to przerobić tak, żeby dla 261 − 1 wypisywało mi też tę liczbę. Może da radę
samo wyrażenie zmienić, żeby sp−2 ==0 dla 261 − 1.
23 paź 21:54