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

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

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

条件

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

Posted feedbacks - Scala

shiroさんと同じ方法で。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import java.math.BigInteger
import java.math.BigInteger.ONE

implicit def int2big(n:int) = new BigInteger(n.toString)
def gcd(m:BigInteger, n:BigInteger):BigInteger = m.compareTo(n) match {
  case 0 => n
  case x if m == ONE || n == ONE => ONE
  case 1 => gcd(n, m.subtract(n))
  case x => gcd(m, n.subtract(m))
}

Index

Feed

Other

Link

Pathtraq

loading...