このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1258158172/141
#  [1] 授業単元:C言語 
#  [2] 問題文: 
#  整数値として入力された数を素因数分解するプログラムを作成せよ。 
#  表示は、612 = 2^2*3^2*17のようにする、これは2の2乗×3の2乗×17という意味である 
#   
#  普通に全部×で表示するものはできたんですが、612 = 2^2*3^2*17と^をつかい、〜の何乗と表現するやり方がわかりませんでした。 
#  よろしくおねがいします。 
# 
素因数分解表示(N) :- 素因数分解(N,X),write_formatted('%t = %t\n',[X]).

素因数分解(N,X) :- 素因数分解(2,N,N,0,[],L),素因数分解項構成(L,X).

素因数分解(U,M,N,C,X,X) :- U >= N // 2,!.
素因数分解(U,M,N,0,Y,X) :-
    member(J^_,Y),
    0 is U mod J,
    U2 is U + 2,
    素因数分解(U2,N,N,0,Y,X),!.
素因数分解(2,M,N,0,Y,X) :-
    \+(0 is M mod 2),
    素因数分解(3,N,N,0,Y,X),!.
素因数分解(2,M,N,C,Y,X) :-
     \+(0 is M mod 2),
    素因数分解(3,N,N,0,[2^C|Y],X),!.
素因数分解(U,M,N,0,Y,X) :-
    \+(U=2),
    \+(0 is M mod U),
    U2 is U + 2,
    素因数分解(U2,N,N,0,Y,X),!.
素因数分解(U,M,N,C,Y,X) :-
    \+(U=2),
    \+(0 is M mod U),
    U2 is U + 2,
    素因数分解(U2,N,N,0,[U^C|Y],X),!.
素因数分解(U,M,N,C,Y,X) :-
    0 is M mod U,
    C2 is C + 1,
    M1 is M // U,
    素因数分解(U,M1,N,C2,Y,X).

素因数分解項構成([A],A) :- !.
素因数分解項構成([A|R1],B * A) :- 素因数分解項構成(R1,B).