Lagrange: elk natuurlijk getal kan geschreven worden als de som van vier kwadraten. (of soms minder termen. 0^2 mag.)
Bestaat er een algoritme om die vier kwadraten te vinden? Zo ja, hoe werkt die?
Code: Selecteer alles
static int[] run(int valueToTest) {
for(int i=0; i<Double.POSITIVE_INFINITY; i++) {
for(int j=0; j<=i; j++) {
for(int k=0; k<=j; k++) {
for(int l=0; l<=k; l++) {
if(i*i + j*j + k*k + l*l == valueToTest) {
return new int[] {i,j,k,l};
}
}
}
}
}
return null; /*this can never happen.*/
}
Code: Selecteer alles
Lagrange(n)
for(i=floor(sqrt(n)); i>=floor(sqrt(n/4)); i--)
m=n-i^2
for(j=floor(sqrt(m)); j>=floor(sqrt(m/3)); j--)
t=m-j^2
for(k=floor(sqrt(t)); k>=floor(sqrt(t/2)); k--)
if(issquare(t-k^2))
return/print (i, j, k, sqrt(t-k^2))