このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/693
#  問題 
#   
#  左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求めよ。 
#  例 
#  89 => 8^1 + 9^2 = 89 OK 
#  123 => 1^1 + 2^2 + 3^3 = 14 NG 
# 

'左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求める'(_4桁以下の数) :-
        between(0,9999,_4桁以下の数),
        '4要素以下の数ならび'(_4桁以下の数,[],_4要素以下の数ならび),
        '左端からn桁目の数のn乗を合計したものが元の数に等しい'(_4要素以下の数ならび,_4桁以下の数).

'4要素以下の数ならび'(0,L,L) :- !.
'4要素以下の数ならび'(N,L_1,L) :-
        M is N mod 10,
        N_1 is N // 10,
        '4要素以下の数ならび'(N_1,[M|L_1],L).

'左端からn桁目の数のn乗を合計したものが'([N],N).
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2],S) :-
        S is N_1 + N_2 * N_2.
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2,N_3],S) :-
        S is N_1 + N_2 * N_2 + N_3 * N_3 * N_3.
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2,N_3,N_4],S) :-
        S is N_1 + N_2 * N_2 + N_3 * N_3 * N_3 + N_4 * N_4 * N_4 * N_4.