Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2007-03-11

L-99 (34)

| 21:35 | L-99 (34) - わだばLisperになる を含むブックマーク はてなブックマーク - L-99 (34) - わだばLisperになる

L-99 34問目に挑戦 - L-99:Ninety-Nine Lisp Problems

P34

解答
;; Common Lisp
(load "./coprime")

(defun totient-phi (m)
  (do ((i (1- m) (1- i))
       (r 0 (if (coprime m i)
		(1+ r)
		r)))
      ((zerop i) r)))

;; Scheme
(load "./coprime")

(define (totient-phi m)
  (let loop ((n m)
	     (c (- m 1))
	     (acc 0))
    (if (zero? c)
	acc
	(loop m 
	      (- c 1) 
	      (if (coprime n c)
		  (+ acc 1)
		  acc)))))

;; Ruby
load "coprime.rb"

def totient_phi(n)
  i = n
  r = 0
  until i < 1
    r += 1 if coprime(n, i)
    i -= 1
  end
  r
end

オイラーってEulerと綴ることを初めて知った。

Wikipediaによれば、トーティエント関数とは、正の整

数nに対して、1からnまでの互いに素である数の個数だ

そうな。φ関数とも呼ぶらしい。とりあえず関数の意味

はさっぱり分からないが、互いに素な個数を勘定するよ

うに作った。