2015-04-29 22 views
0

例如我有一個數字是55.我可以檢查這個數字的平方數是多少來創建這個數字。平方數有多少?

比如我有55所以,我知道,從5號這個號碼總,這是

55 = 1^2+ 2^2+ 3^2+ 4^2 + 5^2(totally 5* number) 

我發現計數爲5 55。我怎麼能發現任何數字。有沒有公​​式或等式?我不想知道哪個號碼的廣場。我只想知道有多少個數字廣場創建了這個數字。在我的例子中,我的答案是5,但如果我可以計算這個10位數字,那麼它的數字太複雜了。

例如,如果我的電話號碼是652369。怎樣才能找到總共有多少個數字?我只想找到多少個號碼。我很抱歉我的英語。我使用Delphi編程語言。

注意:這些數字每次都不是「連續的」。

+2

這似乎是一個更好的問題http://math.stackexchange.com – doelleri

+0

我知道這裏。我每次都使用這個網站。 :) –

+4

我投票結束這個問題作爲題外話,因爲它更適合[math.se]。這不是[幫助]指南中定義的編程問題。 –

回答

1

有最初的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.

+0

對不起,我不明白。你能找到652398的計數嗎?你怎麼能找到你的例子嗎? –