Congettura di Goldbach
Nel 1742 Christian Goldbach, un matematico amatoriale tedesco, scrisse una lettera a Leonardo Eulero, in cui fece la seguente congettura:
Ogni numero pari maggiore di 4 può essere scritto come la somma di due numeri primi dispari. Per esempio:
8 = 3 + 5. Sia 3 che 5 sono numeri primi dispari.
20 = 3 + 17 = 7 + 13.
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.
Ad oggi non si sa ancora se la congettura sia corretta.
Soluzione di BoldrinD
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int valoreinput=0;
int valoreprimo=0;
int valoresecondo=0;
int isprime(int a){
if (!(a % 2)) return 0;
int i;
for (i = 3; i <= ((a/2)+1); i +=2)
if (!(a % i))
return 0;
return 1;
}
int calcoloprimo(int val){
int trovato=0;
while(trovato==0){
val--;
trovato = isprime(val);
if (trovato==1){
valoreprimo=val;
break;
}
else {
calcoloprimo(val);
}
}
int valoresecondo = valoreinput-valoreprimo;
int trovatosec=0;
trovatosec = isprime(valoresecondo);
if(trovatosec==1 && valoreprimo+valoresecondo == valoreinput && valoresecondo!=1){
return valoresecondo;
}
else {
calcoloprimo(valoreprimo);
}
}
int main(int argc, char *argv[]){
valoreinput = atoi(argv[1]);
valoresecondo=calcoloprimo(valoreinput);
printf("%d\n",valoreprimo);
printf("%d\n",valoresecondo);
}
Il codice è privo di alcuni controlli sull'input, si assume che il valore dato in input sia pari e >=4. il problema???? dopo essere arrivati all'input 2996, il costo dell'esecuzione diventa eccessivo.