Programación General > C/C++
Problema con numeros primos
(1/1)
SkullFlower:
Hola,
Quiero hacer un programa que imprima la suma de todos los números primos menores a 2,000,000 pero cuando ejecuto el código me da un numero negativo o algo así. :wacko:
Ya lo probé con números mas pequeños, por ejemplo que haga la suma de los números primos menores a 10,000 y si me da bien el resultado pero supongo que me da error en el de 2,000,000 por que debería de usar long o algo parecido pero lo use y de todos modos me salia un numero negativo, asi que mi duda es:
como puedo hacer para que me de el resultado bien?
este es el codigo que tengo:
--- Código: C ---#include<stdio.h>int Primos(int x);int main(){ int x, y, z; y = 0; x = 2000000; for(x; x>=2; x--){ if(Primos(x)){ y += x; } } printf("%dn", y); return 0;}int Primos(int x){ int y; int cont = 0; for(y=1;y<=x; y++){ if(x%y==0){ cont++; } } if(cont==2){ return 1; } return 0;}
este es mi código usando long, pero pues nunca lo había usado así que puede que tenga algo mal y por eso no me de bien el resultado:
--- Código: C ---#include<stdio.h>int Primos(unsigned long int x);int main(){ unsigned long int x, y, z; y = 0; x = 2000000; for(x; x>=2; x--){ if(Primos(x)){ y += x; } } printf("%dn", y); return 0;}int Primos(unsigned long int x){ unsigned long int y; unsigned long int cont = 0; for(y=1;y<=x; y++){ if(x%y==0){ cont++; } } if(cont==2){ return 1; } return 0;}
posman:
Tal vez el resultado esta bien, pero como estas utilizando %d en la funcion printf, con esos haces que imprima un entero.
Debes utilizar el formato para imprimir enteros largos sin signo, no recuerdo exactamente cual es:
--- Código: Text ---printf("%l",y);printf("%ll",y);printf("%ul",y);printf("%lu",y);printf("%llu",y);
Riskz:
--- Cita de: "posman" ---
--- Código: C ---printf("%lu",y);
--- Fin de la cita ---
Como bien dijo posman, quizas el problema es con el formato del entero cuando usas printf.
Para un unsigned long int esa es la opcion correcta.
Saludos
Navegación
Ir a la versión completa