sábado, dezembro 25, 2004

Goldbach

Sobre uma breve discussão a respeito do Teorema de Goldbach.
Pintou no Só Matemática um código sobre.
Reescrevi-o para C. Há uma falha a ser corrigida, mas fica para depois.

#include <stdio.h>
#include <math.h>

int IsPrime (int p){
   int j=0;
   if (p%2 == 0) return 0;
   for (j=3; j<=1+(int)sqrt(p) && (p%j!=0); j+=2);
   return (p%j!=0);
}

int main (int argc, char *argv[]) {
   int i=0, m=0, n=0;

   if (argc!=2){
      puts ("use ./goldbach "); exit(1);
   }
   n=atoi(argv[1]);

   if (n<=4){
      puts ("numero muito pequeno"); exit(1);
   }

   if (n%2==1){
      puts ("numero impar"); exit(1);
   }


   printf ("%d:", n);

   for (i=3; i<=n/2; i+=2) {
      if (IsPrime(i) && IsPrime(n-i)) {
         printf("\n\t %ld = %ld + %ld",n, i, n-i);
         m++;
      }
   }

   printf ("\n%d representacoes distintas\n", m);
   return 0;
}