Problem 56 「もっとべき乗の数字和」 †
Googol (10100)は非常に大きな数である: 1の後に0が100個続く. 100100は想像を絶する. 1の後に0が200回続く. その大きさにも関わらず, 両者とも桁の和は1である.
a, b < 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 件のコメント:
コメントを投稿