[C++]Liczby pierwsze - wysyp programu przy liczbach powyżej 2 000 000
Ostatnio zmodyfikowano 2014-03-29 20:18
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 Pojęcie zmiennej i podstawowe typy danychOto kod mojego programu: #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 :) |
|
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). |
|
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. |
|
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 :( |
|
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 |
|
Parapet |
» 2014-03-29 19:41:35 Ale po co Ci aż tak wielkie liczby? :D |
|
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) |
|
pekfos |
» 2014-03-29 20:03:45 bool czy_skreslona[ n + 1 ];
|
To błąd. |
|
« 1 » 2 |