练习 1.27

我们将这个测试函数称之为 carmichael-test ,对于给定参数 \(n\) ,它要检验所有少于 \(n\) 的数 \(a\)\(a^n\) 是否都与 \(a\)\(n\) 同余:

;;; 27-carmichael-test.scm

(load "p34-expmod.scm")

(define (carmichael-test n)
    (test-iter 1 n))

(define (test-iter a n)
    (cond ((= a n)
            #t)
          ((congruent? a n)
            (test-iter (+ a 1) n))
          (else
            #f)))

(define (congruent? a n)           ; 同余检测
    (= (expmod a n n) a))

然后,按照书本 35 页脚注 47 里的 Carmichael 数一个个进行测试:

1 ]=> (load "27-carmichael-test.scm")

;Loading "27-carmichael-test.scm"...
;  Loading "p34-expmod.scm"... done
;... done
;Value: congruent?

1 ]=> (carmichael-test 561)

;Value: #t

1 ]=> (carmichael-test 1105)

;Value: #t

1 ]=> (carmichael-test 1729)

;Value: #t

1 ]=> (carmichael-test 2465)

;Value: #t

1 ]=> (carmichael-test 2821)

;Value: #t

1 ]=> (carmichael-test 6601)

;Value: #t

讨论

blog comments powered by Disqus