Algoritmo ricerca terne pitagoriche

di il
1 risposte

Algoritmo ricerca terne pitagoriche

Salve,
ho "ideato" questo algoritmo per la ricerca di terne pitagoriche in un intervallo che va da 0 a x dove x e' la dimensione massima dei cateti (a e b, nel caso del programma i e j).
int MakePythagoreanTriple(int max) {
	int c, i, j, k, count = 0;
	double flag = 0;
	for (i = 3; i <= max; i++) {
		for (j = i + 1; j <= max; j++) {
			c = (int)(pow(i, 2) + pow(j, 2));
			for (k = j + 1; k <= c; k++) {
				if (CheckPythagoreanTriple(i, j, k)) {
					printf("\t~ %d, %d, %d\n", i, j, k);
					count++;
				}
			}
		}
	}
	return count;
}

double CheckPythagoreanTriple(int a, int b, int c) {
	int result = (int)(pow(a, 2) + pow(b, 2));
	c = (int)(pow(c, 2));
	if (result == c) {
		return 1;
	}else{
		return 0;
	}
}
L'algoritmo funziona a dovere e trova tutte le terne pitagoriche senza doppioni. Solo che, esiste un modo più veloce? A livello computazionale, questo è molto pesante.. vorrei sapere se ci sono metodi alternativi più leggeri.
Grazie.

1 Risposte

  • Re: Algoritmo ricerca terne pitagoriche

    Inizia con evitare di fare operazioni inutili!
    1) CheckPythgoreanTriple PERCHE' RITORNA un double e non un boolean (true/false)?
    2) perche' usi la funzione 'Math.pow()' che, OGNI VOLTA converte l'intero in double e tu poi devi convertire il risultato in intero?
    3) non stai utilizzando le PROPRIETA' della terna!
    4) sbagli il modo di calcolare c, dato a e b

    https://it.m.wikipedia.org/wiki/Terna_pitagoric

    Domandona: quale e' la complessita' computazionale del tuo algoritmo?
Devi accedere o registrarti per scrivere nel forum
1 risposte