Wpis z mikrobloga

#programowanie #matematyka #naukaprogramowania
Zrobiłem kod w pythonie, który ma sprawdzać dwoma algorytmami czy liczba jest pierwsza.
Czemu algorytm probabilistyczny jest tak zajebiście wolny?
kod: https://hastebin.com/lavoxokube

trywialny algorytm zajmuje dla dość małej liczby pierwszej 1.5e-3s
probabilistyczny (który wydawało mi sie że powinien zapierniczać) potrzebuje 3.269e-1
200 krotna różnica, i wydaje się że rośnie wykładniczo
  • 24
@RedveKoronny: operator potęgowania dla tak dużych liczb działa tak długo.
Procesor nie ma instrukcji do operacji na tak dużych liczbach, zapewne pod spodem uruchamia się biblioteka do liczenia takich rzeczy która liczy to "na piechotę" w długich pętlach.
@RedveKoronny: prawdę mówiąc zastanawiam się dlaczego to działa aż tak szybko jak działa ;)

Jak się nad tym zastanowić to wynik operacji 2**n wymaga jednego bitu więcej niż wynosi n
Twoje n to 96790357, czyli wychodzi na to że dla zmieszczenia tej liczby trzeba mieć 12MB pamięci (na początku jedynka, potem same zera)
A potem na takim kolosie wykonać modulo (czyli dzielenie)

To w ogóle zwraca na pewno poprawny wynik? :)
@RedveKoronny: No ale porownujesz naiwne * do biblioteki która prawdopodobnie używa lepszego formatu liczb (i pewnie fast exp w środku). Widzisz że przy n wielkości 100k masZ 30 razy szybszy wynik niż w starym sposobie