read

(define (square x) (* x x))

(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 (fermat-test n)
  (define (try-it a)
    (= (expmod a n n) a))
  (define (fermat-test-iter n aval)
    (cond ((= aval 0) #t)
          ((try-it aval) (fermat-test-iter n (- aval 1)))
          (else #f)))
  (fermat-test-iter n (- n 1)))

수행결과

> (fermat-test 561)
#t
> (fermat-test 1105)
#t
> (fermat-test 1729)
#t
> (fermat-test 2465)
#t
> (fermat-test 2821)
#t
>

561 은 알다시피 3 의 배수로 소수가 아니다. 다른 수들도 모두 마찬가지로 소수가 아닌데, fermat test 를 통과한다. fermat test 를 만든 페르마도 대단하지만 위 수들을 찾은 양반들도 대단하다. 정수론은 수학에서도 아주 독특한 분야인 것 같다.

Blog Logo

Ki Sung Bae


Published

Image

Gsong's Blog

Developer + Entrepreneur = Entreveloper

Back to Overview