question est la suivante: trouvez la somme de tous les nombres premiers inférieurs à 2 millions.
J'ai à peu près le tamis d'Erastothènes, et le programme ci-dessous semble fonctionner pour un petit nombre, c'est-à-dire une limite de définition de 10L. P>
J'ai soumis 1179908154 comme réponse, telle que produite par le programme suivant, et c'était incorrect. P>
Aide à l'aide du problème. Merci. P>
3 Réponses :
Vous calculez les nombres premiers correctement, mais la somme est trop grande (plus de 2 ^ 32) et ne convient pas à une longueur de 32 bits non signée. Vous pouvez utiliser un nombre 64 bits ( long long code> sur certains compilateurs) pour résoudre ce problème. P>
Merci. Ya j'ai simplement supposé que longtemps non signé était déjà trop gros pour quelque fin que ce soit. que je suis bête
Vous allez courir dans cela de temps en temps; Il existe de nombreux problèmes d'Euler avec de gros chiffres. Parfois, vous pouvez faire des tondeuses intelligentes pour éviter d'utiliser long long code> ou même des types illimités; Parfois, vous ne pouvez pas.
Votre logique semble être correcte, mais vous vous déconnectez avec les types de données et leurs ganges. Vérifiez si cela fonctionne ou non:
#include <stdio.h>
#define LIMIT 2000000
int i[LIMIT];
int main()
{
long long int n = 0, k, sum = 0;
for(n = 0; n < LIMIT; n++)
i[n] = 1;
i[0] = 0;
i[1] = 0;
long long int p = 2;
while (p*p < LIMIT)
{
k = 2;
while (p*k <LIMIT)
{
i[p*k] = 0;
k++;
}
p++;
}
for(n = 0; n < LIMIT; n++)
if (i[n] == 1)
{
sum += n;
}
printf("%lld\n",sum);
return 0;
}
Vous pouvez également constater que vous devez utiliser le commutateur compilateur -std = c99 fort> aussi. J'ai fait avec GCC (GCC) 3.4.5 (Mingw-Vista spécial R3) strong>. P>
I.e. p>
GCC -Wall -Std = C99 -O Problème10
Problème10.c P>
blockQuote>
fixé en remplaçant longtemps avec long long et% LU avec% llu
Je suis content de courir dans cette question, j'ai passé beaucoup de jours frustrés à ce sujet! +1