※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。



Problem 99 「最大のべき乗」 †

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

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

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

注: ファイル中の最初の二行は上の例である.

解法
Logを使っても十分答えが出るようです。
本当は精度の関係からこのような計算は邪道なのですがほかの方も同じような解法のようです。

calc([],_,Ans,Ans):-!.
calc([[X,Y]|Rows],RowNo,[LogNum,_],Result):-
	Log1 is log(X)*Y,
 	Log1>LogNum,
	!,
	RowNo1 is RowNo+1,
	calc(Rows,RowNo1,[Log1,RowNo],Result).
calc([_|Rows],RowNo,NowAns,Result):-
	!,
	RowNo1 is RowNo+1,
	calc(Rows,RowNo1,NowAns,Result).


main99:-
	open('pe99.txt',read,IS),
	read_term(IS,Rows,[]),
	close(IS),
	calc(Rows,1,[-1,-1],Ans),
	write(Ans).