#需要Maple 2018或更高版本
satfilter:=proc(n)局部n2,P,nP,X,P2,J,Cons,子句,i,J,k,Ck;
n2:=换算(n,基数,2);
P: =数量理论:-系数集(n);
nP:=nops(P);
P2:=地图(换算,P,基数,2);
J: =地图(t->map(s->[$s..s+nops(t)-1]),选择(i->n2[i..i+nobs(t)-1-]=t,[$1..nops(n2)+1-nops(t)]),P2);
如果成员([],J),则返回false fi;
缺点:=true;
对于i从1到nops(J)do
条款:=X[i,J[i][1];
对于从2到nops(j[i])的j,do
条款:=条款&或X[i,J[i][J]]
od;
缺点:=缺点和条款;
od;
对于k从1到nops(n2)do
Ck:={};
对于i从1到nP do
对于从1到nops(j[i])的j,do if成员(k,j[i,j]),则Ck:=Ck联合{X[i,j[i]]}fiod;
如果nops(Ck)>=2,那么对于i从2到nops(Ck)do对于j从1到i-1 do Cons:=Cons&and(¬(Ck[i])&or¬(Ck[j]))od-fi;
日期:
逻辑:-可满足(Cons);
结束进程:
选择(satfilter,[2..1000]美元)#罗伯特·伊斯雷尔2023年1月10日
|