Clojureの勉強のために、L-99: Ninety-Nine Lisp Problemsを解いてみる。
どうも問題番号に抜けがあって全99問じゃないようだが、そういうものなんだろうか。
P31 (**) Determine whether a given integer number is prime.
素数かどうかを判定する関数を書く。
Haskellで書いたZaneli.Euler.isPrime関数をそのままClojureで書いただけ。
奇数であれば、3~調べる値の平方根までの範囲の奇数のいずれかで割り切れれば素数ではない。
素数のリストが欲しいわけではないのでそんなに難しい事をやらなくて大丈夫だった、かな?
P32 (**) Determine the greatest common divisor of two positive integer numbers.
最大公約数を求める関数を書く。
Scalaで同一の処理を見かけたことがあったので、まずはそれをそのままClojureで書いたものを。
ズルしたっぽいので、自力で考えて別パターンを書いてみた。
与えられた2値の大きいほうの半分を最大値、1を最小値とする降順リストを作り、与えられた2値が両方割り切れる値を探す。
P33 (*) Determine whether two positive integer numbers are coprime.
2値が互いに素かどうかを判定する関数を書く。
P32で作った関数を使って、最大公約数が1かどうかで判定する…手抜きっぽいけど難易度も1(*)だし多分出題意図通りなんだろう。

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .