Twierdzenie Lagrange'a

0

Witam
Napisałem program, który wyświetla czwórki spełniające Twierdzenie Lagrange'a (http://pl.wikipedia.org/wiki/Twierdzenie_Lagrange%27a_%28teoria_liczb%29 ale mam problem z permutacjami i nie wiem jakie je usunąć.
Proszę o pomoc.

/*
Twierdzenia Lagrange'a
*/

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

int Lagrange(int n){
    int x,y,z,t;
    
    printf("sqrt(%d) + 1 = %d\n",n,(int)sqrt(n)+1);
    
    for(x=0;x<=(int)sqrt(n)+1;x++)
        for(y=0; y<=(int)sqrt(n)+1; y++)
            for(z=0; z<=(int)sqrt(n)+1; z++)
                for(t=0;z<=(int)sqrt(n)+1;z++)
                    if(x*x + y*y + z*z + t*t == n){
                           printf("(%d, %d, %d, %d)\t",x,y,z,t);
                           printf("%d + %d + %d + %d =%d \n",x*x,y*y,z*z,t*t,n);
                    }
                    
    puts("Koniec (dla sprawdzenia kiedy koncza sie petle).");
                                    
}

int main(void){
    int n;

    printf("Prosze podac liczbe: ");
    scanf("%d",&n);

    Lagrange(n);

    getchar();
    getchar();

    return 0;
}
0

Przyspieszysz program i unikniesz większości powtórzeń (wszystkich, jeżeli żaden składnik nie występuje dwukrotnie) jeżeli zrobisz tak:
<code=c++>
for(x=0;x<=(int)sqrt(n)+1;x++)
for(y=0; y<=x; y++)
for(z=0; z<=y; z++)
for(t=0;z<=t;z++)

0

Oparłem się na Twoim kodzie, ale on jest błędny, powinno być tak:

    for(x=0;x<=(int)sqrt(n)+1;x++)
        for(y=0; y<=x; y++)
            for(z=0; z<=y; z++)
                for(t=0;t<=z;t++)
0

Dzięki wielkie.
Wersja ostateczna, być może komuś się przyda.

/*
Twierdzenia Lagrange'a
*/

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

void Lagrange(unsigned int n);

int main(void){
    unsigned int n;

    puts("Twierdzenie Lagrange'a");

    while(1 == 1){
    printf("Prosze podac liczbe: ");
    scanf_s("%d",&n);

    Lagrange(n);
    printf("\n");
   
    }

    getchar();
    getchar();

    return 0;
}

void Lagrange(unsigned int n){
    unsigned int x,y,z,t;
    unsigned int sqr_t = (int)sqrtf(n)+1;
    
    for(x=(sqr_t/2);x<=sqr_t;x++)
        for(y=0; y<=x; y++)
            for(z=0; z<=y; z++)
                for(t=0;t<=z;t++)
                    if(x*x + y*y + z*z + t*t == n){
                           printf("(%d, %d, %d, %d)\t",x,y,z,t);
                           printf("%d + %d + %d + %d =%d \n",x*x,y*y,z*z,t*t,n);
                    }
                                                     
}


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