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).

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2014年03月04日 12:02