2014年3月20日木曜日

プロジェクトオイラー Problem 56 「もっとべき乗の数字和」 †

Problem 56 「もっとべき乗の数字和」 

Googol (10100)は非常に大きな数である: 1の後に0が100個続く. 100100は想像を絶する. 1の後に0が200回続く. その大きさにも関わらず, 両者とも桁の和は1である.
ab < 100 について自然数 ab を考える. 桁の和の最大値を答えよ.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2056


解法
探索範囲が狭いので全探索でも問題ありません。
少しだけハックなコードとしてreverse(List,[Last|_]),
とするとリストの末尾が取り出せます。
プチハックな記述です。



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

search(Sum):-
      between(1,99,A),
      between(1,99,B),
      N is A^B,
      number_codes(N,List),
      sum(List,Sum).
main56:-
      findall(E,search(E),List),
      sort(List,List1),
      reverse(List1,[Ans|_]),
      write(Ans).

0 件のコメント:

コメントを投稿