Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczby pierwsze Mersenne'a

Ostatnio zmodyfikowano 2013-03-22 18:17
Autor Wiadomość
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:

C/C++
#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?
P-79107
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.
P-79108
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.
P-79136
« 1 »
  Strona 1 z 1