有人可以彻底解释这个IsItPrime函数吗?

Can someone thoroughly explain this IsItPrime Function?

本文关键字:IsItPrime 函数 解释      更新时间:2023-10-16

这是我在CodeReview网站上找到的函数,它确定一个数字是否是素数,同时还处理负数。很少有事情是我无法真正赶上的。

1(为什么第一个条件<= 3应该处理负面因素?
2( return n > 1实际返回的是什么?它是否以任何方式影响其他条件?

bool IsItPrime(int n)
{
    if(n <= 3) {
        return n > 1;
    } else if(n % 2 == 0 || n % 3 == 0) {
        return false;
    } else {
        for(int i(5); i * i <= n; i += 6) {
            if(n % i == 0 || n % (i + 2) == 0) {
                return false;
            }
        }
        return true;
    }
}
if(n <= 3) {
    return n > 1;
}

如果不是最简单的推理,也是聪明的。 首先,如果你的数字为 3 或更少,则输入 if 正文。 这涵盖了前 2 个素数加上所有负数 0 和 1。 然后它继续return n > 1;这意味着如果n大于1你将返回 true,否则返回 false。 因此,如果n 23,则该函数将返回true。 它小于 2 然后返回 false 。它将与

 if (n <= 1) return false;
 else if (n == 2 || n == 3) return true
 else if ... 

但如您所见,这是更多的类型并添加 if 语句。

根据维基百科:

素数

(或素数(是大于 1 的自然数

return n > 1 表示对于任何大于 1 的数字返回 true(即 2 或 3,因为这出现在测试 if n<=3 之后(。 0、1 或负数将使其返回 false。

1(为什么第一个条件是<= 3,当它应该处理时 底片? 2( 返回 n> 1 实际返回什么? 这些问题是相互关联的:

该函数可以采用负参数,但如您所见,第一组条件测试参数是否介于 1 和 3 之间。 2,3 是素数,它将返回 true,如果参数为 1,0 或负数,它将返回 false(因此它不适用于负数(。

if(n <= 3) {
    return n > 1;
}

这将为所有小于或等于 3 的数字返回 false,但 2 和 3 除外。这也处理负数(任何负数将小于 3(。

else if(n % 2 == 0 || n % 3 == 0) {
    return false;
} 

这会对参数执行模运算,如果数字可被 2 或 3 整除,则返回 false(这也会使它不是素数(。即使 2 和 3 是可整除的,我们也可以安全地称之为,因为上面已经处理过了。

else {
    for(int i(5); i * i <= n; i += 6) {
        if(n % i == 0 || n % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}

这将通过循环处理所有其他数字,直到您高于数字的平方根。它还执行模运算,这次使用 5、7 和所有值 n + 6、n + 8(<11、13>、<17、19> 等(。我们可以迭代 6,因为我们正在执行上面的 2 和 3 模运算。