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

[C++] Jak zadeklarować tablicę w sicie Eratostenesa

Ostatnio zmodyfikowano 2015-11-28 15:10
Autor Wiadomość
patox
Temat założony przez niniejszego użytkownika
[C++] Jak zadeklarować tablicę w sicie Eratostenesa
» 2015-11-28 14:09:24
Witam
Dlaczego tworząc sito tablicę muszę zadeklarować przed mainem? W jaki sposób inaczej mogę zadeklarować tablicę na sito? W pierwszym pokazuje mi się błąd SIGSEGV, drugie natomiast przechodzi bez problemu.
C/C++
#include <iostream>

using namespace std;

int main()
{
    bool p[ 10000001 ] = { };
    for( int i = 2; i * i <= 10000000; i++ )
    {
        if( !p[ i ] )
        {
            for( int j = i * i; j <= 10000000; j += i )
            {
                p[ j ] = true;
            }
        }
    }
    p[ 1 ] = 1;
    p[ 0 ] = 1;
}

C/C++
#include <iostream>

using namespace std;

bool p[ 10000001 ] = { };

int main()
{
    for( int i = 2; i * i <= 10000000; i++ )
    {
        if( !p[ i ] )
        {
            for( int j = i * i; j <= 10000000; j += i )
            {
                p[ j ] = true;
            }
        }
    }
    p[ 1 ] = 1;
    p[ 0 ] = 1;
}

Druga sprawa to nie wiem, dlaczego mam błąd w tym zadaniu ze spoja: http://pl.spoj.com/problems/FR_04_14/
C/C++
#include <iostream>

using namespace std;

bool p[ 10000001 ] = { };

int main()
{
    for( int i = 2; i * i <= 10000000; i++ )
    {
        if( !p[ i ] )
        {
            for( int j = i * i; j <= 10000000; j += i )
            {
                p[ j ] = true;
            }
        }
    }
    p[ 1 ] = 1;
    p[ 0 ] = 1;
    int t, a, d = 1, u = 1;
    cin >> t;
    for( int i = 0; i < t; i++ )
    {
        cin >> a;
        if( p[ a ] == 0 )
        {
            cout << a << endl;
        }
        else
        {
            while( p[ a + d ] == 1 )
            {
                d++;
            }
            while( p[ a - u ] == 1 )
            {
                u++;
            }
            if( u > d )
            {
                cout << a + d << endl;
            }
            else
            {
                cout << a - u << endl;
            }
            u = 1;
            d = 1;
        }
    }
}
P-140985
j23
» 2015-11-28 15:10:50
Dlaczego tworząc sito tablicę muszę zadeklarować przed mainem?
Dlatego, że definiując tablicę w main tworzysz ją na stosie, a ten ma ograniczoną wielkość (parę mega). 10000001 elementów to ponad 10MB!
P-140991
« 1 »
  Strona 1 z 1