Project Euler : Problem 6 『Sum square difference』


Uzbekistan SumsUzbekistan Sums / MrHicks46
projecteuler.net


問題

 100までの数を使って「各数を2乗した物の総和」と「総和の2乗」を計算し、
「各数を2乗した物の総和」引く「総和の2乗」の値を求めなさい。


総和の公式を使えば簡単

 「各数を2乗した物の総和」の式はこう。*1
\( 1^{2} + 2^{2} + \cdots + n^{2} = \frac{n(n+1)(2n+1)}{6} \)
「総和の2乗」の式はこう。
\( (1 + 2 + \cdots + n)^{2} = \left(\frac{n(n+1)}{2}\right)^{2} \)
あとは計算結果を引いてやるだけ。

コード
using System;
using System.Diagnostics;

namespace Problem6
{
    class Program
    {
        static void Main(string[] args)
        {
            Int64 n = 100;

            Debug.WriteLine(SquareOfSum(n) - SumOfSquare(n));
        }

        //2乗の総和を取る方
        static Int64 SumOfSquare(Int64 n)
        {
            return (n * (n + 1) * (2 * n + 1)) / 6;
        }

        //総和の2乗を取る方
        static Int64 SquareOfSum(Int64 n)
        {
            Int64 t = (n * (n + 1)) / 2;

            return t * t;
        }
    }
}
答え

 25164150



ゼロの総和 (ハーパーBOOKS)

ゼロの総和 (ハーパーBOOKS)

恐怖の総和〈下〉 (文春文庫)

恐怖の総和〈下〉 (文春文庫)