Originariamente inviata da
Satiro88
Ciao a tutti come da titolo dovrei fare un programma,sicuramente banale e spero non offensivo per voi, che,dato un certo numero n inserito da tastiera,vada a controllare che ogni numero da 1 ad n possa essere scomposto come somma di quadrati,una volta stabilito ciò bisogna stampare la lista dei numeri che effettivamente possono essere riscritti come somma di due quadrati.
Per esempio, se n=8
avremo:
2=1^2 + 1^2
5=1^2 + 2^2
8=2^2 + 2^2
In effetti il programmino,per come l'ho scritto,sembra funzionare,l'unica cosa,un pò fastidiosa è il fatto che ignori la proprietà commutativa,quindi mi scrive due volte il 5 per esempio.Sapete come evitare queste ripetizioni senza dover usare controlli tra array o cose del genere?
(tra l'altro ciò non si verifica per il primo e l'ultimo valore,immagino perchè entrambi partano da 1 a ciclare e c'è un solo caso in cui entrambi sono a 1 per esempio)
codice:
#include <stdio.h>
#include <stdlib.h>
/* ->VARIANTE<-
SCRIVERE UN PROGRAMMA CHE LEGGE UN INTERO POSITIVO N E STAMPA LA SEQUENZA DI TUTTI I NUMERI SCOMPONIBILI COME SOMMA DI DUE QUADRATI*/
// primoA=primo Addendo secondoA=secondo Addendo
int main()
{
int a,primoA,secondoA,tot,n,found;
printf("\n inserisci numero\n\n");
scanf("%d",&n);
for(int z=1;z<=n;z++)
{
a=z;
found=0;
for(int i=1;i<=a;i++)
{
if(found==1)break;
primoA=i*i;
for(int j=1;j<=a;j++)
{
if(found==1)break;
secondoA=j*j;
tot=primoA+secondoA;
if(tot==a)
{
printf("\n%d = [ %d^2 + %d^2 ]\n",z,i,j);
found=1;
}
}
}
}
system ("pause");
return 0;
}
Grazie mille.