SML:基本质数测试

SML: Basic Prime Testing

我正在尝试编写一个基本函数来获取一个整数并评估为一个布尔值,该布尔值将检查该整数是否为素数。

我使用了一个辅助函数来跟踪我正在测试的当前除数,如下所示:

fun is_divisible(n : int, currentDivisor : int) =
    if currentDivisor <= n - 1 then
        n mod currentDivisor = 0 orelse is_divisible(n, currentDivisor + 1)
    else
        true;

fun is_prime(n : int) : bool =
    if n = 2 then
        true
    else
        not(is_divisible(n, 2));

它对我来说看起来不错,但我在 9 上测试它并得到错误,然后在 11 上测试它也得到错误。

抱歉今天的所有问题,谢谢!

问题是,如果您的 is_divisible 达到最后一种情况,它应该 return false 因为这意味着所有迭代除数的余数都大于零,除了最后一个是它自己的号码。所以你应该重命名 is_divisible 和 return false 而不是 true