Congettura di Goldbach

From Sistemi Operativi
Jump to navigation Jump to search

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.