|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2003
Città: Umbria
Messaggi: 220
|
Terne pitagoriche
Ho fatto un programma che calcola le terne pitagoriche. Il cateti non devono superare pero' la lunghezza di 500. Ve lo posto qua sotto:
#include<stdio.h> int main(void) { int lato,lato1,ipo,var; for (lato=1;lato<=500;++lato) { for (lato1=1;lato1<=500;lato1++) { var=(lato*lato)+(lato1*lato1); for (ipo=1;ipo<=500000;ipo++)/*500000 è dato da 500^2*2 */ { if (var==(ipo*ipo)) printf("%d\t%d\t%d\t%d\n", lato, lato1, ipo, var); } } } } Non riesco a capire dove sbaglio, vi posto una parte di output: 3 4 5 25 4 3 5 25 4 288 253820 82960 5 12 13 169 vi pare che la 3 terna vada bene????? ![]() ![]() come è possibile???? se metto una ulteriore if dopo if (var==(ipo*ipo)) in questo modo e includo anche <math.h>: if (var==(ipo*ipo)) if (sqrt(var)==ipo) printf("%d\t%d\t%d\t%d\n", lato, lato1,ipo, var); il programma fuzniona bene. (perdonate l'ignornaza, ma sto imparando)
__________________
gli hackers non esistono |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: Terne pitagoriche
Quote:
253820 * 253820 modulo 2^32 è esattamente 82960 !!! Gli interi sono a 32 bit di conseguenza i numeri rappresentabili sono compresi fra -2^31 e (2^31)-1... In pratica 253820*252820 è 15 volte multiplo di 2^32 e quindi e come se ricominciasse a contare 15 volte da 0... Nel for + interno non farlo arrivare a 500000, ma solamente a var e avrai risolto questo problema... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:42.