• Viernes 29 de Marzo de 2024, 10:28

Autor Tema:  Problema con numeros primos  (Leído 1724 veces)

SkullFlower

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Problema con numeros primos
« en: Miércoles 31 de Marzo de 2010, 09:45 »
0
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
  1. #include<stdio.h>
  2. int Primos(int x);
  3. int main(){
  4.     int x, y, z;
  5.     y = 0;
  6.     x = 2000000;
  7.     for(x; x>=2; x--){
  8.         if(Primos(x)){
  9.             y += x;
  10.         }
  11.     }
  12.     printf("%dn", y);
  13.     return 0;
  14. }
  15. int Primos(int x){
  16.     int y;
  17.     int cont = 0;
  18.     for(y=1;y<=x; y++){
  19.         if(x%y==0){
  20.             cont++;
  21.         }
  22.     }
  23.     if(cont==2){
  24.         return 1;
  25.     }
  26.     return 0;
  27. }
  28.  

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
  1. #include<stdio.h>
  2. int Primos(unsigned long int x);
  3. int main(){
  4.     unsigned long int x, y, z;
  5.     y = 0;
  6.     x = 2000000;
  7.     for(x; x>=2; x--){
  8.         if(Primos(x)){
  9.             y += x;
  10.         }
  11.     }
  12.     printf("%dn", y);
  13.     return 0;
  14. }
  15. int Primos(unsigned long int x){
  16.     unsigned long int y;
  17.     unsigned long int cont = 0;
  18.     for(y=1;y<=x; y++){
  19.         if(x%y==0){
  20.             cont++;
  21.         }
  22.     }
  23.     if(cont==2){
  24.         return 1;
  25.     }
  26.     return 0;
  27. }
  28.  

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problema con numeros primos
« Respuesta #1 en: Miércoles 31 de Marzo de 2010, 16:41 »
0
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
  1. printf("%l",y);
  2. printf("%ll",y);
  3. printf("%ul",y);
  4. printf("%lu",y);
  5. printf("%llu",y);
  6.  

Riskz

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Problema con numeros primos
« Respuesta #2 en: Viernes 2 de Abril de 2010, 20:19 »
0
Cita de: "posman"
Código: C
  1. printf("%lu",y);
  2.  

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