有最初的N平方和封閉形式的公式:
1^2 + 2^2 + ... + n^2 = n(n+1)(2n+1)/6
要回答你的問題,你要「反轉」上面的函數;換句話說,您需要求解方程式
n(n+1)(2n+1)/6 = 55 or 2n^3 + 3n^2 + n - 330 = 0
解決方程式的一種方法是使用牛頓法。我們
f(n) = 2n^3 + 3n^2 + n - 330
f'(n) = 6n^2 + 6n + 1
然後在您完成最初的猜測(例如,n_0 = (330/2)^(1/3)
因爲3是主導力量),使用公式
n_(k+1) = n_k - f(n_k)/f'(n_k)
您可以終止該算法改善這種猜測時從n_k
變化到n_(k+1)
足夠小。
我不知道德爾福,所以這裏是一個在Java中的實現。
public class SumOfSquares {
public static double f(double x) {
return ((2*x+3)*x+1)*x;
}
public static double fp(double x) {
return (6*x+6)*x+1;
}
public static void main(String[] args) {
int target = Integer.parseInt(args[0]);
double guess = Math.pow(target/2.0,1/3.0);
double epsilon = 0.00001;
double x0, x1;
x1 = guess;
do {
x0 = x1;
x1 = x0 - (f(x0)-6*target)/fp(x0);
} while (Math.abs(x0-x1)>epsilon);
System.out.println(x1);
// check
int sum = 0;
for (int i=0; i<=Math.floor(x1); i++) {
sum += i*i;
}
System.out.println(sum);
}
}
java SumOfSquares 55
打印出5.0,並且檢查平方和高達5^2是55. java SumOfSquares 652369
打印出124.5855 ...這表明652369是不完全的平方之和。下面的正方形的總和是643250.
這似乎是一個更好的問題http://math.stackexchange.com – doelleri
我知道這裏。我每次都使用這個網站。 :) –
我投票結束這個問題作爲題外話,因爲它更適合[math.se]。這不是[幫助]指南中定義的編程問題。 –