Liczby pierwsze w odwrotnej kolejności
Ostatnio zmodyfikowano 2012-11-04 21:31
stokrotka Temat założony przez niniejszego użytkownika |
Liczby pierwsze w odwrotnej kolejności » 2012-11-04 12:10:25 Cześć! Program dla danej liczby n (1<=n<=1000) ma wypisać n kolejnych liczby pierwszych w odwrotnej kolejności. Mój kod: #include<iostream> #include<cstdlib> using namespace std;
const int N = 1000; bool T[ N + 1 ]; int tab[ 1000 ];
void sitoEratostenesa() { int n, p, w; for( n = 2; n <= N; n++ ) T[ n ] = 1; for( p = 2; p * p <= N; p++ ) { if( T[ p ] == 1 ) { for( w = p * p; w <= N; w = w + p ) { T[ w ] = 0; } } } }
bool isPrime( int p ) { return T[ p ]; }
int main() { int n; cin >> n; int p = 2, j = 0; sitoEratostenesa(); while( j != n ) { if( isPrime( p ) ) { tab[ j ] = p; j++; } p++; } for( j =( n - 1 ); j >= 0; j-- ) { cout << tab[ j ] << endl; } system( "pause" ); return 0; }
Gdzieś zrobiłam błąd, bo program nie zawsze działa. Proszę o jakąś wskazówkę :) |
|
Mrovqa |
» 2012-11-04 14:18:44 for( j =( n - 1 ); j >= 0; j-- )
Popatrz jak zapisujesz dane do tablicy. Na pewno tych liczb jest aż tak dużo? |
|
stokrotka Temat założony przez niniejszego użytkownika |
» 2012-11-04 18:13:25 Ok, więc zrobiłam tak: for( int i =( j - 1 ); i >= 0; i-- ) { cout << tab[ i ] << endl; }
ale dalej nie działa. Chyba, że źle zrozumiałam podpowiedź. |
|
Mrovqa |
» 2012-11-04 20:49:32 Mój błąd, myślałem, że generujesz liczby pierwsze od 1 do n, a ty generujesz n pierwszych liczb pierwszych. W takim razie sprawa jest taka: generujesz liczby pierwsze pomiędzy 1 a 1000, a - przynajmniej mi tak wiadomo - że pomiędzy 1 a 1000 nie ma 1000 liczb pierwszych. |
|
ison |
» 2012-11-04 21:31:20 for( w = p * p; w <= N; w = w + p ) tu powinno być w = 2 * p; w <= N; w += p jeśli chcesz wygenerować 1000 liczb pierwszych to swoją stałą N powinnaś zwiększyć do ~8000 |
|
« 1 » |