Algorithm 使用N与N/2的平方根检查N是否为素数的优点是什么?

Algorithm 使用N与N/2的平方根检查N是否为素数的优点是什么?,algorithm,math,primes,sieve,Algorithm,Math,Primes,Sieve,检查一个数字是否为素数是一个省去迭代次数的问题吗 例37是一个素数,检查18.5(37的一半)和6.08(平方根)可以省去很多工作,但两者遵循相同的原则 抱歉问一下,我正试图巩固我的逻辑,即使用一个数字的平方根来确定它是否是一个素数,并试图向其他人解释它,因为如果n可以被2整除,那么它也可以被n/2整除,如果它不能被1整除,它也不会被另一个整除。因此,检查其中一个就足够了,2检查起来更方便 同样的逻辑适用于3:(缺少)被3整除意味着(缺少)被n/3整除,因此只需检查3 这同样适用于4、5、…、x

检查一个数字是否为素数是一个省去迭代次数的问题吗

例37是一个素数,检查18.5(37的一半)和6.08(平方根)可以省去很多工作,但两者遵循相同的原则


抱歉问一下,我正试图巩固我的逻辑,即使用一个数字的平方根来确定它是否是一个素数,并试图向其他人解释它,因为如果
n
可以被2整除,那么它也可以被
n/2
整除,如果它不能被1整除,它也不会被另一个整除。因此,检查其中一个就足够了,
2
检查起来更方便

同样的逻辑适用于
3
:(缺少)被
3整除意味着(缺少)被
n/3整除,因此只需检查
3

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

检查并包括
楼层(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不是素数,我们可以表示为N=p1*p2,其中p1和p2的除数大于1。显然,p1或p2(或两者)小于或等于N的平方根。所以,进一步检查是没有意义的


值得注意的是,确实存在更先进的检查数字素性的方法。例如:米勒-拉宾素性测试。虽然此测试是概率测试,但在某些设置下,它可以为小于最大64位整数的所有素数生成正确答案。

因为如果a>sqrt(N)>0且b>sqrt(N)>0,则ab>N。这意味着如果N可分解为N=ab,则{a,b}中至少有一个素数一定是,我投票结束这个问题,因为它不是关于编程,而是关于数学。我想你的意思是:如果n可被floor(sqrt(n))+1整除,那么n可被n/(floor(sqrt(n))+1整除,也就是@thang,对,我不知道
x
是怎么挤进去的,谢谢。我认为我们不需要