このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 132代目 #141 # [1] 授業単元:C言語 # [2] 問題文: # 整数値として入力された数を素因数分解するプログラムを作成せよ。 # 表示は、612 = 2^2*3^2*17のようにする、これは2の2乗×3の2乗×17という意味である # # 普通に全部×で表示するものはできたんですが、612 = 2^2*3^2*17と^をつかい、〜の何乗と表現するやり方がわかりませんでした。 # よろしくおねがいします。 # 素因数分解(M,L) :- findall(N,between(2,M,N),L1), 素因数分解(L1,M,L). 素因数分解([],Y,[]) :- ! . 素因数分解(_,0,[]) :- !. 素因数分解([A|R1],Y,L) :- 'Aは素数であるが、AがYの約数の時はAは素因数である。Yを実Aを法としてZを求め以後Yと置き換える。AがYの約数でないときはAを無視する。'([A|R1],Y,L). 'Aは素数であるが、AがYの約数の時はAは素因数である。Yを実Aを法としてZを求め以後Yと置き換える。AがYの約数でないときはAを無視する。'([A|R1],Y,L) :- 'Aは素数であるが、AがYの約数の時はAは素因数である。Yを実Aを法としてZを求め以後Yと置き換える。'([A|R1],Y,L). 'Aは素数であるが、AがYの約数の時はAは素因数である。Yを実Aを法としてZを求め以後Yと置き換える。AがYの約数でないときはAを無視する。'([A|R1],Y,L) :- 'AがYの約数でないときはAを無視する。'([A|R1],Y,L). 'AがYの約数でないときはAを無視する。'([A|R1],Y,R2) :- \+(0 is Y mod A), 素因数分解(R1,Y,R2). 'Aは素数であるが、AがYの約数の時はAは素因数である。Yを実Aを法としてZを求め以後Yと置き換える。'([A|R1],Y,[A|R2]) :- 素因数分解の篩(A,Y,R1,L), 0 is Y mod A, Z is Y // A, 素因数分解([A|L],Z,R2),!. 素因数分解の篩(_,Y,[],[]) :- !. 素因数分解の篩(_,Y,[A|R],[]) :- A > Y,!. 素因数分解の篩(N,Y,[A|R1],R2) :- 0 is A mod N, 素因数分解の篩(N,Y,R1,R2),!. 素因数分解の篩(N,Y,[A|R1],[A|R2]) :- 素因数分解の篩(N,Y,R1,R2) . 素因数分解表示(N) :- 素因数分解(N,X), 素因数分解項構成(X,Y), writef('%w = %w\n',[N,Y]). 素因数分解項構成(L,X) :- 'Aが連続する場合はAの乗数表現で、そうでないものはA'(L,X,[]),!. 素因数分解項構成(L,X * B) :- 'Aが連続する場合はAの乗数表現で、そうでないものはA'(L,X,L1), 素因数分解項構成(L1,B),!. 素因数分解項構成([A|R1],A * B) :- 素因数分解項構成(R1,B). 'Aが連続する場合はAの乗数表現で、そうでないものはA'(L,X,L1) :- 'Aが連続する場合はAの乗数表現で、'(L,X,L1),!. 'Aが連続する場合はAの乗数表現で、そうでないものはA'([A|R],A,R). 'Aが連続する場合はAの乗数表現で、'(L,A ^ _乗数,L1) :- append([A|R0],L1,L), 'すべてがAただし[]は偽'(R0,A), \+(L1 = [A|_]), length([A|R0],_乗数),!. 'すべてがAただし[]は偽'([A],A) :- !. 'すべてがAただし[]は偽'([A|R],A) :- 'すべてがAただし[]は偽'(R,A).