Это рассматривается как эффективный генератор простых чисел. Мне кажется, что это довольно эффективно. Используется ли поток, который замедляет работу программы?Является ли этот простой генератор неэффективным C++?
Я пытаюсь представить это SPOJ и он говорит мне, что мой предел времени превышен ...
#include <iostream>
#include <sstream>
using namespace std;
int main() {
int testCases, first, second, counter = 0;
bool isPrime = true;
stringstream out;
cin >> testCases;
for (int i = 0; i < testCases; i++) {
// get the next two numbers
cin >> first >> second;
if (first%2 == 0)
first++;
// find the prime numbers between the two given numbers
for (int j = first; j <= second; j+=2) {
// go through and check if j is prime
for (int k = 2; k < j; k++) {
if (j%k == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
out << j << "\n";
}
isPrime = true;
}
out << "\n";
}
cout << out.str();
return 0;
}
EDIT: Программа должна генерировать простые числа между числами, указанными в поле ввода. (Смотрите здесь для более подробной информации: Prime Generator Problem)
-Tomek
, что не может быть возможным в доступной памяти, однако; настройка массива размера INTMAX, а затем удаление неиспользуемых элементов занимает много оперативной памяти; конечно, это может быть сделано со связанным списком, но это слишком медленно, тоже – warren 2008-10-23 20:38:23
Вам действительно нужен только один бит на номер для реализации этого алгоритма. – Ferruccio 2008-10-23 20:45:19
Для целей SPOJ я сомневаюсь, что они сделают второй-первый настолько большой, что память будет проблемой, и если бы они это сделали, они, вероятно, были бы очень мягкими во время выполнения. В общем, SPOJ заставит вас выбрать во времени эффективный, если не эффективный по времени, алгоритм времени исполнения. – 2008-10-23 20:52:40