Cheap、Fast、Goodに触発され、 2つだけのアルゴリズムを実装します。
数学
ゼロ以外の2つの整数aおよびbが与えられた場合、GCF dは、aとbの両方を余りなく除算する最大の整数です。係数Bézout整数のペアである(x、y)のようにAX +による= D。ベズー係数は一意ではありません。たとえば、次の場合:
a = 15, b = 9
我々は持っています
d = 3
x = 2
y = -3
以来15*2 + 9*(-3) = 30 - 27 = 3
。
GCFとBézout係数のペアを計算する一般的な方法は、ユークリッドのアルゴリズムを使用することですが、これが唯一の方法というわけではありません。
コード
プログラムは、2つの整数を入力として受け取る必要があります。最大の共通因子と1組のベズー係数を出力/返すはずです。
入力例:
15 9
出力例
3 (2, -3)
出力は任意の順序と形式にすることができますが、どちらがGCFでどれが係数であるかは明確でなければなりません。
アンダーハンド
あなたのプログラムは安くて速くて良いものになる可能性があります。残念ながら、それは同時に2つしかありません。
- 安価ではない場合、プログラムは過剰なシステムリソースを使用する必要があります。
- 速くない場合は、プログラムに過度の時間がかかるはずです。
- それが良くない場合、プログラムの出力は間違っているはずです。
プログラムは3つすべてを実行できます(実行できます)。それはあなた次第です-それは時間、コンパイラ、どの入力が大きいかなどに基づく可能性があります。いくつかの追加の注意事項:
- あなたのプログラムは明らかに下手であってはならず、大まかな検査に合格するべきです。3つの個別のアルゴリズムを実装した場合、少し疑わしいと思います。
- で安い場合、「システムリソースの過剰な量」とは、他のプログラムを遅くすることは何もです。メモリ、帯域幅などが考えられます。
- では、高速、それが実行されている方法と比較した場合、「過度の時間」とは安いと良い例。プログラムはまだ終了するはずです。「信じられないほどイライラするが、プログラムを停止するのに十分なほどイライラしない」に近づくほど(おかしく、そして)良くなります。
- で良い場合、出力は明らかに間違ってはならないと通り一遍の検査に合格しなければなりません。「2アンナハーフ」のGCFが得られた場合は、非常に疑わしいと思います。
これは人気のコンテストなので、ほとんどの賛成票が勝ちます!
編集
明確にするために、私は「高速で安価」、「安価で良い」、「高速で優れた」さまざまなケースで実行できるプログラムを探しています。