Est-ce considéré comme un générateur de nombre premier efficace. Il me semble que c'est assez efficace. Est-ce l'utilisation du flux qui rend le programme plus lent?Est-ce que ce générateur primaire est inefficace C++?
Je suis en train de le soumettre à SPOJ et il me dit que ma limite de temps dépassé ...
#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: Le programme est censé générer des nombres premiers entre les chiffres spécifiés dans l'entrée. (Voir ici pour plus de détails: Prime Generator Problem)
-Tomek
qui peuvent ne pas être possible dans la mémoire disponible, cependant; mettre en place un tableau de la taille INTMAX puis annulant les éléments inutilisés prennent beaucoup de RAM; cela peut certainement être fait avec une liste chaînée, mais c'est trop lent aussi. – warren
Vous n'avez vraiment besoin que d'un bit par nombre pour implémenter cet algorithme. – Ferruccio
Aux fins de SPOJ, je doute qu'ils fassent en sorte que le second soit si important que la mémoire soit un problème, et s'ils le faisaient, ils seraient probablement assez indulgents avec le temps d'exécution. En règle générale, SPOJ vous obligera à choisir un algorithme efficace, sinon efficace pour la mémoire, à exécuter à temps. –