Я завершил основную программу генерации. Теперь я хочу проверить количество времени, необходимое для всех простых чисел, и сохранить эти числа в массиве. Я написал этот код ….
#include <iostream>
#include <ctime>
using namespace std;
int main ()
{int long MAX_NUM = 1000000;
int long MAX_NUM_ARRAY = MAX_NUM+1;
int long sieve_prime = 2;
int long sieve_prime_constant = 0;
int time_store = 0;
int *Num_Array = new int[MAX_NUM_ARRAY];
std::fill_n(Num_Array, MAX_NUM_ARRAY, 3);
Num_Array [0] = 1;
Num_Array [1] = 1;
while (time_store<=100)
{
clock_t time1,time2;
time1 = clock();
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;
}
}
}
time2 = clock();
delete[] Num_Array;
cout << "It took " << (float(time2 - time1)/(CLOCKS_PER_SEC)) << " seconds to execute this loop." << endl;
cout << "This loop has already been executed " << time_store << " times." << endl;
float Time_Array[100];
Time_Array[time_store] = (float(time2 - time1)/(CLOCKS_PER_SEC));
time_store++;
}return 0;
}
Когда я запускаю его, программа, кажется, проходит длинный цикл один раз, а затем вылетает. Что не так, и как я могу это исправить?
Вы удаляете вас numArray
в конце первого цикла, так что вы обращаетесь к NULL, когда вы снова ходите вокруг …
Не уверен, что вы собираетесь делать с delete[]
утверждение … но что бы вы ни собирались сделать — либо сделать это где-нибудь еще, либо сделать что-то еще, либо повторно инициализировать массив, либо … вы, без сомнения, можете понять это отсюда.
Других решений пока нет …