2014年3月21日金曜日

プロジェクトオイラー Problem 63 「べき乗の桁の個数」 †

Problem 63 「べき乗の桁の個数」 

5桁の数 16807 = 75は自然数を5乗した数である. 同様に9桁の数 134217728 = 89も自然数を9乗した数である.
自然数を n 乗して得られる n 桁の正整数は何個あるか?

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2063


解法
10以上の数は桁の増加がnの増加より大きくなります。
10以下の数はいつかは桁の増加にnの増加が追い付かれます。
log計算すればすぐに答えが出ます。

sum([],0):-!.
sum([X|Xs],Result):-sum(Xs,Re),Result is Re+X.

search(B):-
      between(1,9,A),
      B is floor(1/(1-log10(A))).
main63:-
      findall(N,search(N),AnsList),
      sum(AnsList,Ans),

      write(Ans).

0 件のコメント:

コメントを投稿