要检查一个数字是否为素数,天真的方法是尝试将数字除以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一半可以划分给定的数字"
请帮我知道是否正确
答案 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
计算为必须除以另外两个整数,请将其称为a
和b
。这两个数字都需要为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]}。