Rozkład na sumę kwadratów - gdzie mam błąd

0

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;
}
0

dla jakich działa dobrze a dla jakich źle - pomoże to przy debugowaniu:P

0

Błąd masz w podejściu:

#include <stdio.h>
#include <math.h>

int main()
  {
   int N,n,a,b;
   printf("Podaj liczbe: ");
   scanf("%d",&N);
   for(a=0,b=(int)sqrt(N),n=b*b;a<=b;n=a*a+b*b)
     {
      if(n>N) --b;
      else if(n<N) ++a;
      else printf("%d = %d^2 + %d^2\n",n,a++,b--);
     }   
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1