【发布时间】:2016-09-10 19:01:43
【问题描述】:
要检查一个数是否为素数,最简单的方法是尝试将该数除以 2 到 n,如果任何操作得到余数为 0,那么我们说给定的数不是素数。 但是最好只在 n/2 之前进行划分和检查(我知道更好的方法是直到 sqrt(n) ),我想知道跳过后半部分的原因。
如果我们需要检查数字 11 是否是素数, 11/2 = 5。 如果我们在这两种情况下都没有做 11/6 或 11/7 或 11/8 或 11/9 或 11/10,我们得到余数为 0。 任何给定的数字 n 也是如此。
回避下半场的原因是这个吗? “如果你将给定数字除以任何超过给定数字一半的数字,余数永远不会为0,或者换句话说,超过给定数字一半的数字都不能除掉给定数字”
请帮我看看是否正确
【问题讨论】:
-
其实下半场还可以越狱。 :) 但是,假设您有一个数字 x。它可以除以 2, 3, ..., x/2 。如果你不考虑 1 和 x,这就是全部。
x % y = 0x = y * z,但如果你取y > x/2=>z < 2并且唯一的整数0 < z < 2是1。所以,你不关心它,因为每个数字x = x * 1。 -
是的,你是对的。有人可能会说数字的根可能就足够了。
-
没有必要检查 SQRT(n),因为如果该范围内的任何数字除以 n,那么余数将小于 SQRT(n),并且已经被检查过。
-
感谢@ROMANIA 以数学方式解释它。这让我更清楚了。