Hatena::Groupactionscript

nitoyon.dispatchEvent(null)

 | 

2010-04-21

Project Euler #99

| 00:27 | Project Euler #99 - nitoyon.dispatchEvent(null) を含むブックマーク はてなブックマーク - Project Euler #99 - nitoyon.dispatchEvent(null)

指数の形で表される2つの数, 例えば 2^11 と 3^7, の大小を調べることは難しくはない. 電卓を使えば, 2^11 = 2048 < 3^7 = 2187 であることが確かめられる.

しかし, 632382^518061 > 519432^525806 を確認することは非常に難しい (両者ともに300万桁以上になる).

各行に1組が書かれている1000個の組を含んだ22Kのテキストファイルbase_exp.txtから, 最大の数が書かれている行の番号を求めよ.

Problem 99 - PukiWiki

まじめに計算するなら気が遠くなるが、log を取れば激しく簡単な問題になる。それだけ。

package{
import flash.display.Sprite;
import flash.text.TextField;

public class Problem99 extends Sprite{
    private var t:TextField = TextField(addChild(new TextField()));

    public function Problem99(){
		var max:int = -1;
		var max_num:Number = 0;

		var list:Array = data.split(/\r?\n/);
		for (var i:int = 0; i < list.length; i++) {
			var v:Array = list[i].split(",");
			var n:Number = parseFloat(v[1]) * Math.log(parseFloat(v[0]));
			if (n > max_num) {
				max_num = n;
				max = i + 1;
			}
		}

		t.text = max.toString();
    }

	private var data:String = <>519432,525806
632382,518061
78864,613712
466580,530130
780495,510032
525895,525320
  :
13846,725685</>.toString();
}
}
 |