カメヲラボ

主にプログラミングとお勉強全般について書いてます

CodeIQ過去問集09:一番割り算の多い組み合わせは?

本稿はCodeIQで2014年11月10日~2014年12月1日に出題された「一番割り算の多い組み合わせは?」という問題を再編集したものです。 ※出題時と記述が一部異なる場合がありますがご了承ください。

一番割り算の多い組み合わせは?

【問題】

ユークリッドの互除法

ユークリッドの互除法は、2つの整数値の最大公約数を簡単に求める方法として有名です。 たとえば、120と75の最大公約数を求めるとき、

120÷75 = 1 あまり 45
75÷45 = 1 あまり 30
45÷30 = 1 あまり 15
30÷15 = 2 あまり 0

のように、あまりが0になるところまで繰り返し割り算をすることで、最大公約数である15を得ることができます。

今回は、最大公約数ではなく、割り算の回数に注目してください。上記の例では、4回割り算を行うことで計算が終わりました。 4回の割り算が必要な値の組み合わせは、もっと小さな値でも見つかります。

8÷5 = 1 あまり 3
5÷3 = 1 あまり 2
3÷2 = 1 あまり 1
2÷1 = 2 あまり 0

このように8と5の場合でも、4回の割り算が必要です。

【問題】

1からある整数nまでの間の数から2つの値を選び互除法の計算を行った際に、割り算の回数が最大になる値の組み合わせを答えてください。複数見つかった場合は、その中の1例のみで構いません。

【入力】

nの値は、次の3種類とします。

(1) n=1234
(2) n=123456
(3) n=1234567890

これらの値は、コードの中に直接書き込んでいただいてもかまいませんし、実行時引数や標準入力からでも結構です。

【出力】

上記の3例に対して、互除法の除算回数が最大になる場合の、「回数」と「その2数(大きい順)」を出力してください。

  • (例)nが10, 100, 300の場合
n=10
4 8 5
n=100
9 89 55
n=300
11 233 144

【解説】