AGC015-F Kenus the Ancient Greek
問題概要
回にわたって整数 が与えられる。 を満たす整数 の組で、Euclid の互除法を走らせた時の反復回数の最大値と、それを導く組の個数を求めよ。
解法
まず、最大値を求めることを考える。回数ごとに組の最小値を貪欲に考えていくと、フィボナッチ数列に帰着され、簡単に回数が求まるところまでは明らかだろう。
フィボナッチ数列は、 と定義しよう。
ここで、フィボナッチ数列の性質に注目すると、 では を満たす。これを考えると、ある組を 倍したものが可能なら、その次の組も使えて、その組の操作回数が最大だったことに矛盾するため、答えとして求まる組は互いに素である。
次に、このような組の個数を数えることを考える。 実は、組としてありうるものは、最大回数を 回として、 をみたす を用いて と表せる。
互除法の操作を後ろから考えると、どこかで、 以上の整数 を用いて のように漸化式の過程が変化して数列が生成される場合も、操作回数は変わらないことがわかる。このように途中で別の漸化式を用いることを「逸脱」と呼ぼう。
組から数列は一意に定まるので、逸脱も含めて、題意を満たす組を生成する数列の個数を数えればよい。
実は、逸脱は題意を満たす組を導く数列を生成する過程で、 では高々 回しか起こらない。また、そのとき必ず である。これは、先ほど述べたフィボナッチ数列の性質をもとに示せる。これから、組を表す式が導けて、また、この事実から、、つまり であれば となることもわかる。
で起こり得る逸脱の回数は、簡単な除算だけで求められるので、 において逸脱がどこで起こるかを決めれば、組の個数を数えることができる。
は であるため、この問題は で解けた。
感想
フィボナッチ数列が題材のため、観察だけしていれば解けてしまう(その上証明がほとんどいらない)