このディレクトリの索引 http://pc12.2ch.net/test/read.cgi/tech/1258158172/432 # [1] 授業単元:暇なヤシ集まれ # [2] 問題文(含コード&リンク): # 最大10桁の数字列sと 10000 以下の正整数dが # 与えられたとき、sの各数字を並べ替えて出来る全 # ての数の中で、dで割り切れる数の総数を求める。 # # 計算例) s, d => 解 # ・ 000, 1 => 1 # ・ 1234567890, 1 => 3628800 # ・ 123434, 2 => 90 # '最大10桁の数字列sと 10000 以下の正整数dが与えられたとき、sの各数字を並べ替えて出来る全ての数の中で、dで割り切れる数の総数を求める'(_数字ならび,D,X) :- length(_数字ならび,Len), Len =< 10, D < 10000, findall(Y,(数字ならびから順列整数(_数字ならび,Len,Y),0 is Y mod D),L), sort(L,L2), length(L2,X). 数字ならびから順列整数(Y,0,0). 数字ならびから順列整数(Y,N,X) :- del(Z = Y - A), M is N - 1, 数字ならびから順列整数(Z,M,X2), X is truncate(10^M*A+X2).