使用 N 的平方根与 N/2 相比,检查 N 是否为素数有何优势?

What are the advantages of checking if N is a prime number using square root of N versus N/2?

检查一个数是否为素数是否需要减少迭代次数?

例如。 37 是素数,检查 18.5(37 的一半)与 6.08(平方根)之间的关系可以省去很多工作,但两者遵循相同的原则?

抱歉提问,我正在尝试巩固我使用数字的平方根来确定它是否是质数的逻辑,并试图向其他人解释它

之所以有效,是因为如果 n 可以被 2 整除,那么它也可以被 n / 2 整除,如果它不能被一个整除,它也不会被另一个整除。所以查一个就够了,2查起来更方便

同样的逻辑适用于 3:(不能)被 3 整除意味着(不能)被 n / 3 整除,所以只检查 3.

同样适用于 4, 5, ..., x。什么是 x?它是 sqrt(n),因为 n / sqrt(n) = sqrt(n),所以事情会在这个阈值之后开始重复。

检查到 floor(sqrt(n)) 就足够了。我们可以证明这一点:

floor(sqrt(n)) <= ceil(sqrt(n))
For the "=" part, it's obvious both work.
floor(sqrt(n)) < ceil(sqrt(n)) <=> floor(sqrt(n)) + 1 = ceil(sqrt(n))

if n divisible by floor(sqrt(n)) + 1 =>
=> n divisible by n / (floor(sqrt(n)) + 1) < n / floor(sqrt(n))

由于我们检查了所有小于或等于 floor(sqrt(n)) 的数字,我们会找到除数 n / (floor(sqrt(n) + 1)),因此检查上限没有意义。

首选平方根,因为它可以显着缩短大数的执行时间。

为什么可以用平方根作为极限? 如果 N 不是质数,我们可以将其表示为 N = p1*p2,其中 p1 和 p2 的因数大于 1。显然,p1 或 p2(或两者)都小于或等于 N 的平方根。因此,它毫无意义进一步检查。

请注意,确实存在更高级的检查数字素数的方法。例如:Miller-Rabin 素性检验。虽然此测试是概率性的,但通过某些设置,它可以为小于最大 64 位整数的所有素数生成正确答案。