2015-04-29 2 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]. Это не вопрос программирования, как он определен в рекомендациях [help]. –

ответ

1

Существует замкнутая форма формула для суммы первых п квадратов:

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) достаточно маленький.

Я не знаю, как Delphi, так вот реализация на 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. Как вы можете найти, например, показать мне? –

Смежные вопросы