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

Liczby pierwsze w odwrotnej kolejności

Ostatnio zmodyfikowano 2012-11-04 21:31
Autor Wiadomość
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:

C/C++
#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ę :)
P-68435
Mrovqa
» 2012-11-04 14:18:44
C/C++
for( j =( n - 1 ); j >= 0; j-- )
Popatrz jak zapisujesz dane do tablicy. Na pewno tych liczb jest aż tak dużo?
P-68443
stokrotka
Temat założony przez niniejszego użytkownika
» 2012-11-04 18:13:25
Ok, więc zrobiłam tak:

C/C++
for( int i =( j - 1 ); i >= 0; i-- )
{
    cout << tab[ i ] << endl;
}

ale dalej nie działa. Chyba, że źle zrozumiałam podpowiedź.
P-68473
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.
P-68485
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
P-68494
« 1 »
  Strona 1 z 1