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 » |