program ma na celu wypisać wszystkie możliwe rozkłady podanej liczby naturalnej n na sume kwadratów dwóch liczb naturalnych, czyli podaje n a program wyświetla n=a2 + b2. Dla pewnych liczb działa dobrze, dla pewnych źle. Proszę o pomoc
#include <stdio.h>
int pierw(unsigned int x){
int pocz=0,kon=x,sr=0;
while(kon-pocz>1){
sr=(pocz+kon)/2;
if(sr*sr<=x)
pocz=sr;
else
kon=sr;
}
if(x<=1)
return kon;
else
return pocz;
}
void wypisz(unsigned int n){
int i,p;
for(i=1;i<=pierw(n);i++){
p=pierw(n-i*i);
if((p!=0 && (n=p*p+i*i))){
printf("%d+%d=%d\n", i*i,p*p,n);
}
}
}
int main()
{
int d;
printf("Podaj liczbe:\n");
scanf("%d", &d);
wypisz(d);
return 0;
}