見出し画像

関数型プログラミングの初級問題-31問目- 「互いに素」

 プログラミング初心者が挑戦する関数型プログラミングによる算数の練習問題の第31問です。問題は、OCaml公式ページのものを使いました。
 内容は、問題と答案です。答案の作成時間は、約0分でした。

問題31.

 与えられた二つの正の整数が互いに素か否か判定する関数coprimeを書け(coprimeはブール値を返します)。

※ 例えば、coprime 221 112は、trueになります。

答案

本問の解き方

 「互いに素」とは、最大公約数が1であることを言います。
 最大公約数については、前回の答案でこれを求める関数gcdを作成しています。  
 あとは、関数gcdの返り値が1のときにtrue、1以外のときにfalseを返すラッパーを被せるだけです。

コード

let coprime n m =
let rec gcd r1 r2 = if r2 = 0 then r1 else gcd r2 (r1 mod r2) in

if gcd n m = 1 then true else false

感想

 問題の出題範囲が変わるときに、執筆担当も変わったのでしょうか?
 前後の問題に関連性がみられ、しかも難易度が段階的に上がっています。
 まともな人もいるのですね。
 ただ、もう少しだけ難易度を上げてもよかった気が…。

 次回は、第32問です。見出しにする肉の写真を選びながら、賞味期限ギリギリのパンを齧っています。こころなしか肉の味がします。

おまけ

 文字数が余ったのでくだらない小話をします。 

自転車に乗る小学生は車道を走行すべきだ

 日本においては、原則として、自転車は車道を走らなければなりません。
 自転車が歩道を走行してはいけない理由は、「歩行者の保護」です。

 ところで、日本では所謂原付バイクの免許を取得可能な年齢は16才以上となっています。また、運転免許は18才以上です。
 このような年齢制限が課せられている理由として、精神的にも肉体的も未熟な者に免許を与えると、本人および周囲の安全が脅かされる、ということが考えられます。

 さて、「歩行者保護」の話に戻りましょう。
 自転車が歩道を走ると歩行者が危険に晒されます。
 では、分別のある大人が運転する自転車と、未熟な子供が運転する自転車とでは、どちらが歩行者にとってより脅威となるでしょうか?

 もちろん「子供」が運転する自転車です。
 実際、神戸の小学五年生が老婆を轢いて一億弱の賠償金が生じた自転車事故もあります。

 したがって、小学生にこそ車道を走らせなければなりません。

 この話の本当の狙いは更に一歩進めたところにあります。それは、小学生が歩道を走っていいなら、大人も走っていいはずなのでは?という主張です。
 まあ、危ない自転車がいるのも事実ですので、落としどころとして「変速機が付いている」自転車は車道を走れ、あたりでどうでしょう?

古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。