[C++] Jak zadeklarować tablicę w sicie Eratostenesa
Ostatnio zmodyfikowano 2015-11-28 15:10
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. #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; }
#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/ #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; } } }
|
|
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! |
|
« 1 » |