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