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

[C++]Liczby pierwsze - wysyp programu przy liczbach powyżej 2 000 000

Ostatnio zmodyfikowano 2014-03-29 20:18
Autor Wiadomość
starter
Temat założony przez niniejszego użytkownika
[C++]Liczby pierwsze - wysyp programu przy liczbach powyżej 2 000 000
» 2014-03-29 19:00:24
Witam,
napisałem program znajdujący liczby pierwsze przy użyciu "sita Eratostenesa".
Program działa, jednak tylko do liczby około 2 000 000. Nie mogę znaleźć dlaczego tak jest mimo tego, że użyłem typu
unsigned long long
, który powinien obsługiwać liczby do 18 446 744 073 709 551 615 (wg » Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja

Oto kod mojego programu:
C/C++
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <math.h>>

int main()
{
    typedef unsigned long long ull;
    ull n;
    char nazwa[ 30 ];
    std::cout << "Do jakiego pliku zapisac? ";
    std::cin >> nazwa;
    std::fstream plik;
    plik.open( nazwa, std::ios::out );
    std::cout << "Do jakiej liczby szukac? ";
    std::cin >> n;
    bool czy_skreslona[ n + 1 ];
   
    for( ull i = 0; i <= n; i++ )
         czy_skreslona[ i ] = false;
   
    czy_skreslona[ 0 ] = true;
    czy_skreslona[ 1 ] = true;
   
    for( ull i = 0; i < sqrt( n ); i++ )
    {
        if( czy_skreslona[ i ] )
             continue;
       
        for( ull j = 2; j <=( n / i ); j++ )
        {
            czy_skreslona[ j * i ] = true;
        }
    }
   
    ull a = 1;
    for( ull i = 0; i <= n; i++ )
    {
        if( !czy_skreslona[ i ] )
        {
            plik << a << ". " << i << "\n";
            a++;
        }
    }
   
    plik.close();
    system( "pause" );
    return 0;
}

Proszę o pomoc :)
P-107423
Parapet
» 2014-03-29 19:11:51
Wpisałem do 2000000 i daje końcówkę pliku:
148918. 1999721
148919. 1999733
148920. 1999771
148921. 1999799
148922. 1999817
148923. 1999819
148924. 1999853
148925. 1999859
148926. 1999867
148927. 1999871
148928. 1999889
148929. 1999891
148930. 1999957
148931. 1999969
148932. 1999979
148933. 1999993

Może masz słaby komputer i z tego powodu Ci się sypie program, u mnie jak widać działa normalnie(Windows 7).
P-107424
starter
Temat założony przez niniejszego użytkownika
» 2014-03-29 19:14:42
Chodzi mi o to, że 2 000 000 i jest OK, ale 2 100 000 już się sypie. Nie wiem, gdzie jest dokładna granica.
P-107426
Parapet
» 2014-03-29 19:20:28
Jaki masz system?
Edit: Według mnie jest to limit pamięci narzucony przez system operacyjny i Ci się sypie :(
P-107429
starter
Temat założony przez niniejszego użytkownika
» 2014-03-29 19:28:02
Windows 7 Starter + Service Pack 1
Code Blocks 13.12

sprawdzałem na CB 10 i 12 też nie działa

Nie jestem pewien, bo program ciągnie <3 MB RAM, a odpalałem programy zużywające >500 MB
P-107430
Parapet
» 2014-03-29 19:41:35
Ale po co Ci aż tak wielkie liczby? :D
P-107432
starter
Temat założony przez niniejszego użytkownika
» 2014-03-29 19:43:40
Sprawdziłem i na szybszym komputerze z pełnym Windowsem 7 też nie działa.

Co do większych liczb to zastanawia mnie skąd ten limit (zlokalizowałem go między 2 075 000 a 2 080 000)
P-107433
pekfos
» 2014-03-29 20:03:45
C/C++
bool czy_skreslona[ n + 1 ];
To błąd.
P-107435
« 1 » 2
  Strona 1 z 2 Następna strona