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

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

自然数nの階乗の(1,1) :- !.
自然数nの階乗の(_n,_自然数nの階乗) :-
         _n_1 is _n - 1,
         自然数nの階乗の(_n_1,_自然数nの階乗_1),
         _自然数nの階乗 is _n * _自然数nの階乗_1.

素因数2の個数を求める(N,_素因数2の個数_1,_素因数2の個数) :-
        素因数2が存在する(N,_素因数2の個数_1,D,_素因数2の個数_2),
        素因数2の個数を求める(D,_素因数2の個数_2,_素因数2の個数).
素因数2の個数を求める(_,_素因数2の個数,_素因数2の個数).

素因数2が存在する(N,_素因数2の個数_1,D,_素因数2の個数_2) :-
        N > 0,
        0 is N mod 2,
        D is N // 2,
        _素因数2の個数_2 is _素因数2の個数_1 + 1.