Google Code Jam 2009開催

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Googleブログ(Google Japan Blog: Google Code Jam 2009 を開催します
でお知らせされているように、Google Code Jam 2009が開催されるようです。上記ページ
に、昨年出題された難易度高の問題が掲載されています。ここに転記すると、

(3 + √5)を 1,000,000,000 乗した結果の、整数部分の下 3 桁はどうなるでしょうか?

恐らく、通常のC/C++やJavaを使って解いたとしてもルート5のような無限小数を
1,000,000,000乗することになるので、例え下3桁のmodを取ったとしても普通の
やりかたでは計算誤差が大きくなり、正しい答えは得られないでしょう。

無限小数展開?

ルート5の値を平方根の展開アルゴリズムを使い、十分な長さの桁まで求めた上で
その値を利用して計算することも可能です。しかしこれは、十分な長さの桁が
かなり長くなってしまい、1,000,000,000回もそれを掛け算するというのは現実的じゃ
ないような気がします。

数学的に問題を緩和して計算機を利用する

これが正攻法でしょう。(a+b)^x = ∑[r=0 to x] xCr a^r b^(x-r) で知られている
公式を用い、さらに、3^100 = 3^0 mod 1000, 5^5 = 5^3 mod 1000といった関係式
から、問題をどんどん緩和していくことが可能でしょう。これらの緩和をどんどん
行っていけば、無限小数の掛け算を行う必要がなくなるはずなので、計算誤差も
ほとんど起こらなくなるでしょう。

申し込み

Google Code Jam 2009へのエントリーは
Google Code Jam 2009
のページから行うことができます。興味のある方はぜひエントリーを。

まとめ

おそらく、合同式の関係式を使い、問題を緩和していく方法がベストだと思うの
ですが、実際のところはどうなんでしょうか?実際にやってみた人はどうやったのか
教えてほしいですね。

参考サイト・関連書籍

プログラミング作法
プログラミング作法 Brian Kernighan

おすすめ平均
stars入門書の次の次の次くらいに!
stars繰り返し読む必要あり
stars絶対にお勧めの本です
stars良いプログラマになりたいあなたに
starsC言語の勉強で

Amazonで詳しく見る by G-Tools

関連記事

人気ブログランキングへ

[PR]

トラックバック

http://yamablo.com/2009/08/17-171307.php/trackback

One Response to “Google Code Jam 2009開催”

  1. yamablo » Blog Archive » Google Code Jam 2009開催 Says:

    [...] yamablo » Blog Archive » Google Code Jam 2009開催 [...]

コメント


Get Adobe Flash playerPlugin by wpburn.com wordpress themes