要找到一个数字是素数,为什么检查直到n / 2更好。在下半场避免麻木的原因是什么?

时间:2016-09-10 19:01:43

标签: algorithm primes

要检查一个数字是否为素数,天真的方法是尝试将数字除以2到n,如果任何操作得到余数为0,那么我们说给定的数字不是素数。 但它最好只划分和检查直到n / 2(我知道更好的方法是直到sqrt(n)),我想知道跳过下半场的原因。

如果我们需要检查11号是否为素数, 11/2 = 5。 如果我们在这两种情况下都没有11/6或11/7或11/8或11/9或11/10,那么我们得到的余数为0。 对于任何给定的数字n都是如此。

这是避免下半场的原因吗? "如果你将给定数字除以任何超过给定数字半数的数字,则余数永远不会为0或换句话说,没有一个超过给定数字的数字' s一半可以划分给定的数字"

请帮我知道是否正确

3 个答案:

答案 0 :(得分:4)

因为,不能使它成为素数的最小倍数是2.如果你已经检查了从0到n / 2的所有数字,剩下多少可能有效?如果乘以2大于n,则3或4等的倍数也将大于n。

因此任何数字N的最大因子必须<= N / 2

所以是的,取N / 2,检查所有小于或等于N / 2的整数。因此,对于11,您将检查小于5.5的所有整数,即1,2,3,4和5。

这里解释平方根: Why do we check up to the square root of a prime number to determine if it is prime?

之前已经问过这个问题。

答案 1 :(得分:2)

要将数字n计算为必须除以另外两个整数,请将其称为ab。这两个数字都需要为2或更大,因此检查大于n/2的数字没有任何意义,它们不可能均匀分配。

是的,sqrt(n)效率更高,因为如果a大于sqrt(n),则b必须更小,并且您已经检查过它。< / p>

答案 2 :(得分:0)

目的- 证明合数的因数(不包括 1 和数本身)属于集合 {2, 3, 4, 5, 6....., [n/2]},其中[] 表示最大整数函数。

证明:

假设合数为 n。让它表示为两个因子 a、b 的乘积(两者都不等于 1 或 n,因为我们肯定知道 1 和 n 都会整除 n,因此 a 和 b 可能是的最小自然数是 2)。

 n=a x b

                                

让我们假设 a>[n/2]。

 Then  b=n/a this implies that b<2 

                     

(例如,假设 n=39 然后 a>[39/2]=19。假设 a 是 20(大于 19)然后 b=39/20=1.95 这对于两者的最小可能值是不可能的a 和 b 都将是 2(根据我们的假设),因为 a=20 的条件不满足,进一步增加 a 将使 b 越来越小于 2。以同样的方式,思维过程可以扩展到所有复合数字!)

这是不可能的,因为最小的自然数 a 和 b 可能是 2。

因此,我们的假设是错误的,因此 a 和 b 都必须属于集合 {2, 3, 4, 5, 6....., [n/2]}。