Saya sedang menulis generator untuk bilangan prima menggunakan saringan eratosthenes. Saya telah membuatnya berfungsi untuk menghasilkan bilangan prima di bawah 521102 tetapi angka yang lebih tinggi menyebabkan program mogok. Ini kode saya.
#include <iostream>
using namespace std;
int main ()
{
int long MAX_NUM = 1000000;
int long MAX_NUM_ARRAY = MAX_NUM+1;
int Num_Array [MAX_NUM_ARRAY];
std::fill_n(Num_Array, MAX_NUM_ARRAY, 3);
int long sieve_prime = 2;
int long sieve_prime_constant = 0;
Num_Array [0] = 1;
Num_Array [1] = 1;
while (sieve_prime_constant <= MAX_NUM_ARRAY)
{
if (Num_Array [sieve_prime_constant] == 1)
{
sieve_prime_constant++;
}
else
{
Num_Array [sieve_prime_constant] = 0;
sieve_prime=sieve_prime_constant;
while (sieve_prime<=MAX_NUM_ARRAY - sieve_prime_constant)
{
sieve_prime = sieve_prime + sieve_prime_constant;
Num_Array [sieve_prime] = 1;
}
if (sieve_prime_constant <= MAX_NUM_ARRAY)
{
sieve_prime_constant++;
sieve_prime = sieve_prime_constant;
}
}
}
return 0;
}
Saya memasukkan MAX_NUM sebagai 1000000 dan tidak berhasil. Tapi seperti yang saya katakan sebelumnya, angka di bawah 521102 bisa digunakan. Saya harus bisa menguji angka yang lebih tinggi. Apa masalah saya, dan bagaimana cara memperbaikinya?
Terima kasih banyak!
Terima kasih atas tanggapannya. Saya mencoba solusi mengalokasikan array secara dinamis. Itu bekerja dengan baik, sampai batas tertentu. Setelah mengatur MAX_NUM menjadi sekitar 500 juta saya mendapatkan kesalahan ini ketika saya menjalankan program...
penghentian dipanggil setelah melempar instance 'std::bad_alloc' what(): std::bad_alloc
Aplikasi ini telah meminta Runtime untuk menghentikannya dengan cara yang tidak biasa. Silakan hubungi tim dukungan aplikasi untuk informasi lebih lanjut.
Memiliki atap 500 juta hampir bisa diterima, tapi lebih tinggi masih lebih baik? Ada ide lain?
long
. - person Pete Becker   schedule 10.02.2013