Clpfd不是方形数字

时间:2016-08-18 10:20:28

标签: prolog clpfd

是否可以对整数进行约束,使其不能是(完美)平方数?

我有:

select top 1 with ties Name
from Employee
order by ROW_NUMBER() over(partition by Name order by Name)

如何定义square(Square):- N#>0, Square #= N*N.

我的第一个想法是notsquare(Notsquare):- ...P*P =Q*Q*Notsquare

但是P和Q需要能够是非整数,所以这不起作用。

1 个答案:

答案 0 :(得分:5)

怎么样?
notSquare(S):- N #> 0, R #>0, R #< 2*N+1, S #= N*N+R.

如果S > 0应该有效;如果您还需要使用负数,我想您可以将其修改为

notSquare(S):- S #> 0, N #> 0, R #>0, R #< 2*N+1, S #= N*N+R.
notSquare(S):- S #< 0, SM #= -S, notSquare(SM).