challenge 最大公約数(除算禁止)

あなたが使っている言語で除算と剰余が使えなくなりました。

以下の条件のもと最大公約数を求めるプログラムを書いてください。

条件

  • 除算および剰余の使用禁止
  • 加算や乗算から除算・剰余を単純に定義することも禁止とする
  • ただし, ビットシフトが面倒な場合には引数を2で割った商を返す関数を実装しても構わない
  • 多倍長演算をサポートすること(各言語のライブラリ状況を見たいので)
  • 引数は2つの正整数と仮定して構わない
  • F_1=1, F_2=1のフィボナッチ数列で2000番目と1999番目の最大公約数を求めたときのループ回数を教えてください

Posted feedbacks - Other

haskellにはもともと多倍長でも使えるgcdが用意されています

1
mygcd = gcd

出題者です. 『The Art of Computer Programming』や, 参考ページに挙げたサーベイに歴史が載っていました.

二進互除法を考えたのは, SteinとSilver and Terzianです. Knuth先生曰く一番古いのは以下だそうです.

前漢の中国の数学書『九章算術』の第1章「方田」の第6問より引用.

> (6) 方田: 又有九十一分之四十九。問約之得幾何?

> 答曰:十三分之七。

> 約分術曰:可半者半之,不可半者,副置分母子之數,以少減多,更相減損,求其等也。以等數約之。


Index

Feed

Other

Link

Pathtraq

loading...