¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Îº÷°ú
http://toro.2ch.net/test/read.cgi/tech/1370255305/35
#  ¡Ú¼ÁÌ䥯¥ó¥×¥ì¡Û 
#  [1] ¼ø¶Èñ¸µ¡§¥×¥í¥°¥é¥ß¥ó¥°­µ 
#  [2] ÌäÂêʸ(´Þ¥³¡¼¥É&¥ê¥ó¥¯)¡§É¸½àÆþÎϤ«¤éÀµ¤Î¿ôX¤òÆþÎϤ·¡¢£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á¡¢ÁÇ¿ô¤À¤±¤ò½ÐÎϤ¹¤ë¥×¥í¥°¥é¥à¤òºîÀ®¤·¡¢¼Â¹Ô¤»¤è¡£ 
#  ¼Â¹Ô»þ¤Ë¤ÏX = 50¤È¤Ê¤ë¤è¤¦¤Ë¿ô»ú¤òÆþÎϤ¹¤ë¡£ 
#  

'ɸ½àÆþÎϤ«¤éÀµ¤Î¿ôX¤òÆþÎϤ·¡¢£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á¡¢ÁÇ¿ô¤À¤±¤ò½ÐÎϤ¹¤ë¥×¥í¥°¥é¥à¤òºîÀ®¤·¡¢¼Â¹Ô¤»¤è¡£
¼Â¹Ô»þ¤Ë¤ÏX = 50¤È¤Ê¤ë¤è¤¦¤Ë¿ô»ú¤òÆþÎϤ¹¤ë¡£' :-
        ɸ½àÆþÎϤ«¤éÀµ¤Î¿ôX¤òÆþÎϤ·(X),
        '£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á¡¢ÁÇ¿ô¤À¤±¤ò½ÐÎϤ¹¤ë'(X).

ɸ½àÆþÎϤ«¤éÀµ¤Î¿ôX¤òÆþÎϤ·(X) :-
        À°¿ô¤òÆÀ¤ë(Àµ¤ÎÀ°¿ôX,X > 0,X).

'£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á¡¢ÁÇ¿ô¤À¤±¤ò½ÐÎϤ¹¤ë'(X) :-
        ÁÇ¿ô¤À¤±ÁªÊ̤¹¤ë(X,_ÁÇ¿ô¤Ê¤é¤Ó),
        '£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á'(_À°¿ô),
        ÁÇ¿ô¤À¤±½ÐÎϤ¹¤ë(_À°¿ô,_ÁÇ¿ô¤Ê¤é¤Ó),
        X = _À°¿ô.

ÁÇ¿ô¤À¤±ÁªÊ̤¹¤ë(X,_ÁÇ¿ô¤Ê¤é¤Ó) :-
        '2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó'(_2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó),
        ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(_2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó,_ÁÇ¿ô¤Ê¤é¤Ó).

'2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó'(_2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó) :-
        findall(N,between(2,X,N),_2¤«¤éX¤Þ¤Ç¤Î¤Ê¤é¤Ó).

¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ([],[]) :- !.
¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ([A|R1],[A|R2]) :-
    ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(A,R1,L),
    ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(L,R2).

¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(_,[],[]) :- !.
¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(N,[A|R1],R2) :-
        0 is A mod N,
        ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(N,R1,R2),!.
¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(N,[A|R1],[A|R2]) :-
        ¥¨¥é¥È¥¹¥Æ¥Í¥¹¤ÎäÁ(N,R1,R2).

'£±¤«¤éX¤Þ¤Ç¤ÎÀ°¿ô¤Î¤¦¤Á'(_À°¿ô) :-
        between(1,X,_À°¿ô).

ÁÇ¿ô¤À¤±½ÐÎϤ¹¤ë(_ÁÇ¿ô,_ÁÇ¿ô¤Ê¤é¤Ó) :-
        member(_ÁÇ¿ô,_ÁÇ¿ô¤Ê¤é¤Ó),
        writef('%t ',[_ÁÇ¿ô]),!.
ÁÇ¿ô¤À¤±½ÐÎϤ¹¤ë(_,_).