このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1357191974/955
#  お題:自然数nの階乗の素因数2の個数を求める。(2014年センター試験) 
#  n=5 -> 3 
#  n=13 -> 10 
# 
# 

'自然数nの階乗の素因数2の個数を求める。(2014年センター試験)'(_自然数n,_自然数nの階乗の素因数2の個数) :-
        findsum(_ある自然数の素因数2の個数,(
                    between(1,_自然数n,_ある自然数),
                    ある自然数の素因数2の個数を求める(_ある自然数,_ある自然数の素因数2の個数)),
                _自然数nの階乗の素因数2の個数).

ある自然数の素因数2の個数を求める(_ある自然数,_ある自然数の素因数2の個数) :-
        nth0(_ある自然数の素因数2の個数,_,_),
        \+(0 is _ある自然数 mod (2 ^ (_ある自然数の素因数2の個数 + 1))),!.

findsum(_選択項,_副目標,_合計) :-
        findall(_選択項,_副目標,_選択項ならび),
        sumlist(_選択項ならび,_合計).