Problem 6

Problem 6

module Problem_0006

(*
【問題】
最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。
1² + 2² + ... + 10² = 385
(1 + 2 + ... + 10)² = 3025
これらの数の差は 3025 - 385 = 2640 となる。
同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。
A. 25164150
*)

// 46 ms
// 数学の公式を使用
let sigma k =
    (k * (k+1)) / 2
let sigma2 k =
    (k * (k+1) * (2*k + 1)) / 6
let calc k =
    let num = sigma k
    (num * num) - (sigma2 k)

////65 ms
//let calc k =
//    let list = [1..k]
//    List.zip list list
//    |> List.map (fun (x,y) -> (x,y*y))
//    |> List.unzip
//    |> (fun (a,b) ->
//        let sum = (a |> List.sum)
//        (sum * sum) - (b |> List.sum))

let run() =
    calc 100