Olá, estou tendo problema com dois problemas e já revisei eles várias vezes até vir postar algo aqui.
O primeiro é o problema da conjectura de Goldbach (Que fala que todo número par é a soma de dois números primos). No programa a entrada deve conter o número a ser verificado e a saída são os dois números primos que sua soma resulta no número que foi colocado pelo usuário para ser verificado.
O segundo é um simples programa para verificar se um número é perfeito ou não. (Definição de número perfeito: A soma dos seus divisores resulta nele mesmo. Por exemplo: 6: 3 + 2 + 1 = 6).
Códigos:
1.
#include <stdio.h> #include <stdlib.h> int primo (int n) { // A função retorna 1 se o número for primo e 0 se a sentença não for verdadeira. int r = 0, i = 2; for (i = 2; i < n/2; i++) { if (n % i == 0) { r = 0; } else { r = 1; } } return r; } void Goldbach (int P) { int p1 = P, p2 = 0, var = 0; while (var == 0) { p1--; p2++; if (primo(p1) == 1 && primo(p2) == 1) { var = 1; } } printf ("%d\n%d\n", p2, p1); getchar(); } int main (void) { int N; scanf ("%d", &N); while (N % 2 != 0) { scanf ("%d", &N); } Goldbach(N); getchar(); return(0); }
2.
#include <stdlib.h> #include <stdio.h> void numeroPerfeito (int n) { int somaDivisores, divisor = n/2; while (divisor != 0) { if (n % divisor == 0) { somaDivisores += divisor; } divisor--; } if (n == somaDivisores) { printf ("S\n"); } if (n != somaDivisores) { printf ("N\n"); } } int main (void) { int n; scanf ("%d", &n); numeroPerfeito(n); return(0); }
[]'s.
@Edit: Postei aqui por que os dois programas estão dando saídas erradas, logo o problema está no algoritmo. Outra coisa: eu postei aqui por que eu não quero pegar um algoritmo pronto. Quero dicas de como consertar o meu. Obrigado.