matematykaszkolna.pl
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