このディレクトリの索引

# 指数表記を使わずに整数を素因数分解することを考えます。 # つまり、「72=2×2×2×3×3」のように表現します。 # このときに使う『×』の数は4つです。 # # ここで、元の数の「各桁の和」が「素因数分解した『×』の数」と等しくなるものを考えます。 # 上の72の例であれば、各桁の和は7+2で「9」ですが、『×』の数は「4」なので不適です。 # # この条件を満たすものとしては、「110=2×5×11」や「210=2×3×5×7」、 # 「512=2×2×2×2×2×2×2×2×2」などがあります。 # # では、4桁の整数で上記の条件を満たす数をすべて求めてください。 # # プログラミング言語は不問です。 # お好きな言語で計算してください。 # # 【解答方法】 # 解答用テキストファイルをダウンロードしてください。 # # 解答用テキストファイルを完成させ、アップロードしてください。 '指数表記を使わずに4桁の整数を素因数分解して、元の数の「各桁の和」が「素因数分解した『×』の数」と等しくなる整数を全て求める' :- findall(_4桁の数,( '4桁の数の各桁の合計'(_4桁の数,_乗算記号度数), 指数表記を使わず素因数分解を乗算記号で表現した場合の乗算記号度数(_4桁の数,_指数表記を使った素因数分解,_乗算記号度数)),L), writef('%t\n',[L]). '4桁の数の各桁の合計'(_4桁の数,_各桁の合計) :- between(1000,9999,_4桁の数), 各桁の合計(_4桁の数,0,_各桁の合計). 各桁の合計(0,_各桁の合計,_各桁の合計) :- !. 各桁の合計(N,_各桁の合計_1,_各桁の合計) :- M is N mod 10, N_1 is N // 10, _各桁の合計_2 is _各桁の合計_1 + M, 各桁の合計(N_1,_各桁の合計_2,_各桁の合計). 指数表記を使わず素因数分解を乗算記号で表現した場合の乗算記号度数(N,_指数表記を使った素因数分解,_乗算記号度数) :- 素因数分解(2,N,N,0,[],L), 素因数分解項構成(L,_指数表記を使った素因数分解,0,_乗算記号度数). 素因数分解(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). 素因数分解項構成([J^M],J^M,_乗算記号度数_1,_乗算記号度数) :- _乗算記号度数 is _乗算記号度数_1 + M -1,!. 素因数分解項構成([J^M|R1],B * J^M,_乗算記号度数_1,_乗算記号度数) :- _乗算記号度数_2 is _乗算記号度数_1 + M, 素因数分解項構成(R1,B,_乗算記号度数_2,_乗算記号度数). :- '指数表記を使わずに4桁の整数を素因数分解して、元の数の「各桁の和」が「素因数分解した『×』の数」と等しくなる整数を全て求める',halt.