理系学生日記

おまえはいつまで学生気分なのか

問題1-33(b)

nと互いに素で、nより小さい正整数の乗算。
まず、互いに素なことを調べるpredicateをつくる。

(define (gcd a b)
  (if (= b 0)
      a
      (gcd b (remainder a b))))

(define (comprime? a b)
  (= (gcd a b) 1))

これさえできれば、あとは2変数predicateを1変数predicateにしたり、掛け算したり。

(define (identity x) x)

(define (multiplication-comprime n)
  (define (comprime-n? x)
    (comprime? n x))
  (filtered-accmulate * 1 identity 1 inc n comprime-n?))

8未満で8と互いに素なのは1、3、5、7なので、

gosh> (multiplication-comprime 8)
105