Problem 6

これは簡単

Problem 6 - PukiWiki

最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。
1² + 2² + ... + 10² = 385
(1 + 2 + ... + 10)² = 3025

これらの数の差は 3025 - 385 = 2640 となる。

同様にして、最初の100個の自然数について和の二乗と二乗の和の差を求めよ。


えい。

(define (problem6 n)
  (define (square x) (* x x))
  (define (sum l) (fold + 0 l))
  (define seed (iota n 1))
  (- (square (sum seed))
     (sum (map square seed))))

(problem6 10) ; 2640
(problem6 100) ; 25164150

mapとfoldの練習問題ダネ。

修正

我ながらひどいな・・・

Σn = n(n + 1)/2
Σn^2 = n(n + 1)(2n + 1)/6

(define (problem6 n)
  (let ((s (/ (* n (+ n 1)) 2)))
    (- (* s s)
       (/ (* n (+ n 1) (+ (* 2 n) 1))
          6))))

(problem6 100) ; 25164150
(problem6 (expt 10 100)) ; 2500000000000000.............

どっからでもかかって来いってんだ。