게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

실습용 코드 : is-prime? accumulate

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2008)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최원태



가입: 2006년 9월 16일
올린 글: 369

올리기올려짐: 2008년10월1일 14:33    주제: 실습용 코드 : is-prime? accumulate 인용과 함께 답변

PLT-scheme 용 primality check 함수 is-prime?입니다.
에라토스테네스의 채로 구현했도, 약간 최적화되어있습니다.

primality check의 구현 방법은
에라토스테네스의 채, 확률적 방법, 결정론적 방법 크게 세가지 지류가 있습니다.
수학에 관심있으신분은, 본인의 방법으로 구현해봐도 재미있을 문제입니다.

코드:
(define (interval-list s e)
  (if (> s e) () (cons s (interval-list (+ s 2) e))))

;prime number list generator by Ozan Yigit
;--------------------------start----------------------------
(define (sieve l)
  (define (remove-multiples n l)
    (if (null? l)
   '()
   (if  (= (modulo (car l) n) 0)      ; division test
        (remove-multiples n (cdr l))
        (cons (car l)
         (remove-multiples n (cdr l))))))

  (if (null? l)
      '()
      (cons (car l)
       (sieve (remove-multiples (car l) (cdr l))))))

(define (primes<= n)
  (cond
    ((= n 2) (list 2))
    ((< n 2) ())
    (else (cons 2 (sieve (interval-list 3 n))))))
;---------------------------end-----------------------------
(define (is-prime? n)
  (call-with-current-continuation
   (lambda (k)
     (if (<= n 1) #f
         (begin
           (for-each (lambda (x) (if (= (modulo n x) 0) (k #f) #t))
                     (primes<= (floor (sqrt n))))
           #t)))))



많이 보았을, accumulate 구현입니다.
코드:
(define (accumulate f c l)
  (cond ((null? l) c)
        ((not (list? l)) (error "accumulate : 3rd arg : must be list type"))
        (else (f (car l) (accumulate f c (cdr l))))))
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2008) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay