このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/880
#  [1] 授業単元:C言語 
#  [2] 問題 http://codepad.org/I9NEBx3U 
#  
#  
#   [3]初日に1円、2日目に2円、3日目に4円というように
#      前日の2倍の金額を貯金していったとき、貯金の合計金額が
#      100万円を超えるのは何日目になるかを算出するプログラムを作成せよ。
#  

'初日に1円、2日目に2円、3日目に4円というように
前日の2倍の金額を貯金していったとき、貯金の合計金額が
100万円を超えるのは何日目になるかを算出する'(_何日目) :-
        数列が1000000を超えるまで([1,2,4|R],_),
        length([1,2,4|R],_何日目).

数列が1000000を超えるまで([N],_) :-
        N > 1000000,!.
数列が1000000を超えるまで([A,B|R],_公差) :-
        等差数列の連続した二項(A,B,_公差),
        数列が1000000を超えるまで([B|R],_公差).
数列が1000000を超えるまで([A,B|R],_公比) :-
        等比数列の連続した二項(A,B,_公比),
        数列が1000000を超えるまで([B|R],_公比).

等差数列の連続した二項(A,B,_公差) :-
        var(B),
        B is A + _公差.
等差数列の連続した二項(A,B,_公差) :-
        \+(var(B)),
        _公差 is B - A.

等比数列の連続した二項(A,B,_公比) :-
        var(B),
        B is A * _公比.
等比数列の連続した二項(A,B,_公比) :-
        \+(var(B)),
        _公比 is B / A.