[SICP] 연습문제 1.21 SICP스터디

이 문제는 공짜로 풀어버린 느낌이에요. 본문에 코드도 다 나와있고 그냥 주어진 숫자를 넣어서 가장 작은 약수를 찾기만 하면 되니까요.

* 코드

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

(define (smallest-divisor n)
  (find-divisor n 2))

(define (find-divisor n test-divisor)
  (cond ((> (square test-divisor) n) n)
        ((divides? test-divisor n) test-divisor)
        (else (find-divisor n (+ test-divisor 1)))))

(define (divides? a b)
  (= (remainder b a) 0))

(define (prime? n)
  (= n (smallest-divisor n)))


* 결과
> (smallest-divisor 199)
199
> (smallest-divisor 1999)
1999
> (smallest-divisor 19999)
7


199, 1999는 가장 작은 약수가 자기 자신이니까 소수입니다. 19999 는 작은 약수가 7이네요.
이 문제는 다음 문제들은 위한 떡밥인 듯... ㅎㅎ

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://grow.egloos.com/tb/4628664 [도움말]
  • 지아의 생각 2008/09/22 23:10 #

    오랫만에 SICP 펼치고 연습문제 1.21을 풀었다기 보다는 실행시켜 봤어요. 1.2.6절은 소수 찾기에 대해 1. 가장 작은 약수 찾기, 2. 페르마의 작은 정리 3. 확률 알고리즘을 이용하는 방법에 대해 간단하게 설명하고 있습니다. modulo라는 걸 처음 배움.... more

덧글

  • deisys 2008/09/23 07:24 # 삭제 답글

    날로 먹으면 배탈이... >_<
  • 지아 2008/09/23 11:41 #

    이어지는 문제가 한두개가 아니라능...
    게다가 그닥 쉬워보이지도 않구요.. ㅋㅋ
    날로 문제 하나 준 이유가 있었던게죠..
  • 하야로비 2008/09/27 01:01 # 답글

    음... 소스 코드는 어떻게 하면 이렇게 이쁘게 올릴 수 있는건가요...
    알려주세요~ ㅠㅠ

  • 지아 2008/09/27 22:29 #

    저도 컴키드님께 배운건데요..
    vim에서 html 파일을 만들어서 웹브라우저에 띄운 걸 복사해서 붙여넣으면 되요.. ㅎㅎ
덧글 입력 영역