Liczby pierwsze Mersenne'a
Ostatnio zmodyfikowano 2013-03-22 18:17
Argor Temat założony przez niniejszego użytkownika |
Liczby pierwsze Mersenne'a » 2013-03-22 00:06:43 Witam, próbowałem napisać w C++ program wypisujący wszystkie liczby pierwsze Mersenne'a ( http://pl.wikipedia.org/wiki/Liczby_Mersenne%27a) dla p mniejszego, lub równego sto. Kompilacja przebiegła bezproblemowo, jednak program nie wykonuje swojego zadania, wypisuje na ekranie prawidłowe wyniki do 31 a potem wszystko do 100 jak leci :( Oto kod: #include <iostream> #include <math.h> using namespace std; main() { int n, m, x, y; for( n = 1; n <= 100; n++ ) { y = 0; m = pow( 2, n ) - 1; for( x = 2; x < m; x++ ) { if( m % x == 0 ) { y = 1; break; } } if( y == 0 ) cout << n << ";"; } }
Nie widzę, gdzie tkwi błąd? |
|
ison |
» 2013-03-22 00:19:03 Ponieważ kolejne potęgi dwójki przestają się mieścić w int. Jeśli musisz ręcznie obliczyć te liczby i je wypisać to nie obejdzie się bez własnej arytmetyki na dużych liczbach. Raz, że tak duże liczby się nie zmieszczą w żadnym typie liczbowym, a dwa, że liniowe sprawdzanie pierwszości tych liczb zajmie wieki. |
|
Argor Temat założony przez niniejszego użytkownika |
» 2013-03-22 18:17:00 Ha! A jednak to nie mój błąd a ograniczenie int :P Za odpowiedź bardzo dziękuję, program pisałem jedynie z ciekawości (na wiki jest napisane, że odkryto 48 liczb pierwszych Mersenne'a, a mi odkrycie następnych wydawało się podejrzanie łatwe...). Także temat zamykam. |
|
« 1 » |