Problem 6
これは簡単
最初の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.............
どっからでもかかって来いってんだ。