[ create a new paste ] login | about

Link: http://codepad.org/Q7cX9QYx    [ raw code | fork ]

Scheme, pasted on Jan 5:
;;; Scheme (Gauche)
;;;お題
;;; 「2以上の自然数nについて 2^n-2 がnで割り切れる
;;;  時はnは素数である」の反例を示す
;;;
;;; 解答例
(define foo
  (lambda (n col)
	(if (< n 3) (col 0 '() '())
	  (foo
	   (1- n)
	   (lambda (cnt lst primelst)
		 (cond
		  ((zero? (modulo (- (expt 2 n) 2) n))
		   (if (prime? n primelst)
			   (col cnt lst (cons n primelst))
			 (col (1+ cnt) (cons n lst) primelst)))
		  (else
		   (col cnt lst primelst))))))))

;;;補助関数
;;;素数判定
(define prime?
  (lambda (n l)
	(cond
	 ((even? n) #f)
	 ((null? l) #t)
	 ((zero? (modulo n (car l))) #f)
	 (else
	  (prime? n (cdr l))))))

;;;適用例 3 <= n <= 100000
(foo 100000
	 (lambda (cnt lst primelst)
	   (format #t "counter: ~d\nexeptions:\n" cnt)
	   (reverse lst)))
counter: 78
exeptions:
(341 561 645 1105 1387 1729 1905 2047 2465 2701 2821 3277 4033 4369 4371 4681 5461 6601 7957 8321 8481 8911 10261 10585 11305 12801 13741 13747 13981 14491 15709 15841 16705 18705 18721 19951 23001 23377 25761 29341 30121 30889 31417 31609 31621 33153 34945 35333 39865 41041 41665 42799 46657 49141 49981 52633 55245 57421 60701 60787 62745 63973 65077 65281 68101 72885 74665 75361 80581 83333 83665 85489 87249 88357 88561 90751 91001 93961)


Create a new paste based on this one


Comments: