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
我正在尝试编写一个基本函数来获取一个整数并评估为一个布尔值,该布尔值将检查该整数是否为素数。
我使用了一个辅助函数来跟踪我正在测试的当前除数,如下所示:
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