-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex_1_027.scm
41 lines (30 loc) · 836 Bytes
/
ex_1_027.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(require rackunit)
(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))
(define (square x)
(* x x))
(define (carmichael-number-test n)
(display "Test for ")
(display n)
(newline)
(define (carmichael-number-test-iter a)
(cond ((= (expmod a n n) a)
(display "\t is not accepted"))
((> a 1)
(carmichael-number-test-iter (- a 1)))))
(carmichael-number-test-iter n)
(newline))
(check-equal? (expmod 28 27 27) 1)
(check-equal? (expmod 10 3 5) 0)
(carmichael-number-test 561)
(carmichael-number-test 1105)
(carmichael-number-test 1729)
(carmichael-number-test 2465)
(carmichael-number-test 2821)
(carmichael-number-test 6601)