sicp习题试解 (1.28)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

; ======================================================================

;

; Structure and Interpretation of Computer Programs

; (trial answer to excercises)

;

; 计算机程序的构造和解释(习题试解)

;

; created: code17 02/28/05

; modified:

; (保持内容完整不变前提下,可以任意转载)

; ======================================================================

;; SICP No.1.28

;; 修改expmod中remaider和square为带有额外检查的remainder-check

(define (expmod base exp m)

(define (remainder-check x)

(define result (remainder (square x) m))

(if (and (= result 1)

(not (or (= x 1) (= x (- m 1)))))

0

result))

(cond ((= exp 0) 1)

((even? exp) (remainder-check (expmod base (/ exp 2) m)))

(else (remainder (* base (expmod base (- exp 1) m)) m))))

;; miller-rabin测试主函数,使用题1.27中的测试模式,即测试所有可能的a

(define (miller-rabin-test n)

(define (try-it a)

(cond ((= a 0) #t)

((= (expmod a (- n 1) n) 1) (try-it (- a 1)))

(else #f)))

(try-it (- n 1)))

;; Test-it

;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.

;; > (miller-rabin-test 17)

;; #t

;; > (miller-rabin-test 1013)

;; #t

;; > (miller-rabin-test 1017)

;; #f

;; > (miller-rabin-test 6691)

;; #t

;; > (miller-rabin-test 561) ;; 以下为Carmichael数的测试,符合预期

;; #f

;; > (miller-rabin-test 1105)

;; #f

;; > (miller-rabin-test 1729)

;; #f

;; > (miller-rabin-test 2465)

;; #f

;; > (miller-rabin-test 2821)

;; #f

;; > (miller-rabin-test 6601)

;; #f

;; >

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航