Prolog程序检查数字是否为素数

标签 prolog primes

我根据素数只能被1和其本身整除的逻辑编写了以下程序。因此,我只是经历了将其除以所有大于一个且小于其自身的数字的过程,但是由于将所有输入的数字都视为真实值,所以我似乎遇到了问题。这是我的代码...

divisible(X,Y) :-
    Y < X,
    X mod Y is 0,
    Y1 is Y+1,
    divisible(X,Y1).

isprime(X) :-
    integer(X),
    X > 1,
    \+ divisible(X,2).

提前致谢 :)

最佳答案

我是Prolog的初学者,但设法解决了您的问题。

divisible(X,Y) :- 0 is X mod Y, !.

divisible(X,Y) :- X > Y+1, divisible(X, Y+1).

isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).

主要问题是语句X mod Y is 0。谓词is具有两个(左和右)自变量,但left参数必须是常量或在谓词执行时已统一的变量。我只是交换了这些值。其余代码用于检查数字2(是质数)和小于2(不是质数)的数字

我忘了提及比较Y < X是错误的,因为您想测试2到X-1之间的所有数字,所以比较包括X。

关于Prolog程序检查数字是否为素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282097/

相关文章:

Prolog程序获取一个(整数)数作为两个整数平方和,为什么它不起作用?

prolog - "Who is the barber"Prolog 中的逻辑谜题

python - 计算千次素数

java - 为什么我的程序找不到第 10001 个素数? [项目欧拉问题7]

java - 用java计算第n个素数?

java - 用数组查找素数

list - 计算并删除列表中第一个元素的连续出现次数

prolog - 有人可以逐步描述这个 Prolog 代码吗?

java - 如何使用 GNU Prolog for Java 运行包含列表作为参数的谓词?

python - 通过递归公式改进纯Python素筛