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

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

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

条件

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

Posted feedbacks - C#

最初に断っておきますが、.NET Framework 2.0 に多倍長整数クラスは無いです。というよりまだリリースされてません。
反則技で Visual J# のライブラリから java.math.BigInteger を使いました。反則ついでに BigInteger#gcd を使用…… orz

ちなみに Microsoft.Scripting.Math.BigInteger みたいなのもあります。IronPython とかから使う用で、C# からも使えます。
1
2
3
4
5
6
7
8
9
using System;
using java.math;
static class Program {
    static void Main(string[] args) {
        BigInteger fib1999 = new BigInteger("2611005926183501768338670946829097324475555189114843467397273230483773870037923307730410719313972291638157639230613843870597997481070930648667960025707364078851859017098672504986584144842548768373271309551281830431960537091677315014266625027123872238011234749984205478230617988978500613170516952885123444971471854671812569739975450866912490650853945622130138277040986146312325044424769652148982077548213909414076005501");
        BigInteger fib2000 = new BigInteger("4224696333392304878706725602341482782579852840250681098010280137314308584370130707224123599639141511088446087538909603607640194711643596029271983312598737326253555802606991585915229492453904998722256795316982874482472992263901833716778060607011615497886719879858311468870876264597369086722884023654422295243347964480139515349562972087652656069529806499841977448720155612802665404554171717881930324025204312082516817125");
        Console.WriteLine("gcd({0}, {1}) = {2}", fib1999, fib2000, fib1999.gcd(fib2000));
    }
}

Index

Feed

Other

Link

Pathtraq

loading...