このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1370255305/119
#  [1] 授業単元:課題 
#  [2] 問題文(含コード&リンク): 
#  自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき 
#  最終的に 1 収束するものを Happy number と呼ぶ。 
#   
#  28…〇 
#  2^2 + 8^2 = 68 
#  6^2 + 8^2 = 100 
#  1^2 + 0^2 + 0^2 = 1 
#   
#  89…× 
#  8^2 + 9^2 = 145 
#  1^2 + 4^2 + 5^2 = 42 
#  4^2 + 2^2 = 20 
#  2^2 + 0^2 = 4 
#   
#  1 <= n <= 10000 とした時の全ての Happy number を列挙せよ。 
#  

'自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき 
最終的に 1 収束するものを Happy number と呼ぶ。

28…〇
2^2 + 8^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

89…×
8^2 + 9^2 = 145
1^2 + 4^2 + 5^2 = 42
4^2 + 2^2 = 20
2^2 + 0^2 = 4

1 <= n <= 10000 とした時の全ての Happy number を列挙せよ。'(_Happy_numberならび) :-
        '1 <= n <= 10000 とした時の全ての Happy number を列挙せよ。'(_Happy_numberならび).

'1 <= n <= 10000 とした時の全ての Happy number を列挙せよ。'(_Happy_numberならび) :-
        findall(_n,(
                    between(1,1000,_n),
                    'Happy number'(_n)),
                _Happy_numberならび).


'Happy number'(_n) :-        
        '自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき最終的に 1 収束するものを Happy number と呼ぶ。'(_n,[]).


'自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき最終的に 1 収束するものを Happy number と呼ぶ。'(1,_) :- !.
'自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき最終的に 1 収束するものを Happy number と呼ぶ。'(_n,L) :-
        \+(member(_n,L)),
        '自然数 n の各桁の数を2乗しその和を求める。'(_n,0,_各桁の数の2乗の和),
        '自然数 n の各桁の数を2乗しその和を求める。できた数値も同様に繰り返していき最終的に 1 収束するものを Happy number と呼ぶ。'(_各桁の数の2乗の和,[_n|L]).

'自然数 n の各桁の数を2乗しその和を求める。'(0,_各桁の数の2乗の和,_各桁の数の2乗の和) :- !.
'自然数 n の各桁の数を2乗しその和を求める。'(_n,_s_1,_各桁の数の2乗の和) :-
        _n_1 is _n mod 10,
        _n_2 is _n // 10,
        _s_2 is _s_1 + (_n_1 * _n_1),
        '自然数 n の各桁の数を2乗しその和を求める。'(_n_2,_s_2,_各桁の数の2乗の和).