このディレクトリの索引

法として合同(A,B,P) :-
        integer(P),
        integer(A),
        integer(B),
        \+(P = 0),
        0 is (A - B) mod P.
法として合同(A,B,N) :-
        var(N),
        integer(A),
        integer(B),
        for(1,N,B),
        \+(N = 0),
        0 is (A - B) mod N.


法として合同な整数集合(_整数下限,_整数上限,_法,_剰余式,X) :-
        findall(U,(
                    法として合同な整数生成(_整数下限,_整数上限,_法,_剰余式,U)),
                X).


法として合同な整数ならびの生成(_整数下限,_整数上限,_法,_剰余制約,_生成整数ならび) :-
        findall(_生成整数,(
                    法として合同な整数生成(_整数下限,_整数上限,_法,_剰余制約,_生成整数)),
                _生成整数ならび).


法として合同な整数生成(_整数下限,_整数上限,_法,_剰余制約,_生成整数) :-
        _整数下限 =< _整数上限,
        X is _整数下限 // _法,
        _整数下限の二 is _法 * X + _剰余制約,
        法として合同な整数剰余昇順計算(_整数下限の二,_整数上限,_法,_生成整数),
        _生成整数 >= _整数下限,
        _生成整数 =< _整数上限.
法として合同な整数生成(_整数上限,_整数下限,_法,_剰余制約,_生成整数) :-
        _整数下限 =< _整数上限,
        X is _整数上限 // _法,
        _整数上限の二 is _法 * X - _剰余制約,
        法として合同な整数剰余降順計算(_整数上限の二,_整数下限,_法,_生成整数),
        _生成整数 >= _整数下限,
        _生成整数 =< _整数上限.


法として合同な整数剰余昇順計算(_生成整数,_整数上限,_法,_生成整数) :-
        _生成整数 =< _整数上限.
法として合同な整数剰余昇順計算(_整数下限の二,_整数上限,_法,_生成整数) :-
        _法 > 0,
        _整数下限の二 =< _整数上限,
        Y is _整数下限の二 + _法,
        法として合同な整数剰余昇順計算(Y,_整数上限,_法,_生成整数).


法として合同な整数剰余降順計算(_生成整数,_整数下限,_法,_生成整数) :-
        _生成整数 >= _整数下限.
法として合同な整数剰余降順計算(_整数上限の二,_整数下限,_法,_生成整数) :-
        _整数上限の二 >= _整数下限,
        Y is _整数上限の二 - _法,
        法として合同な整数剰余降順計算(Y,_整数下限,_法,_生成整数).


法として合同な全ての整数集合(_整数下限,_整数上限,_法,X) :-
        findall(W,(
                    for(1,N,_法),
                    法として合同な整数集合(_整数下限,_整数上限,_法,N,W)),
                X).


for(S,S,S) :- !.
for(S,S,E).
for(S,N,E) :-
        succ(S,E,S1),
        for(S1,N,E).

succ(S,E,S1) :-
        S =< E,
        succ(S,S1).
succ(S,E,S1) :-
        S > E,
        succ(S1,S).