【问题标题】:To find a number is prime, Why checking till n/2 is better. What is the reason for avoiding numbres in second half of n找到一个数是素数,为什么检查到 n/2 更好。 n后半段避免numbres的原因是什么
【发布时间】: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 = 0 x = y * z,但如果你取 y > x/2 => z < 2 并且唯一的整数 0 < z < 21。所以,你不关心它,因为每个数字x = x * 1
  • 是的,你是对的。有人可能会说数字的根可能就足够了。
  • 没有必要检查 SQRT(n),因为如果该范围内的任何数字除以 n,那么余数将小于 SQRT(n),并且已经被检查过。
  • 感谢@ROMANIA 以数学方式解释它。这让我更清楚了。

标签: algorithm primes


【解决方案1】:

因为,不会使其成为素数的最小倍数是 2。如果您检查了从 0 到 n/2 的所有数字,剩下的可能会起作用的倍数是多少?如果 2 的倍数大于 n,则 3 或 4 等的倍数也会大于 n。

所以任何数 N 的最大因数必须是

所以是的,取 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?

这个问题以前也有人问过。

【讨论】:

  • 谢谢@PaulD 实际上我已经通过平方根链接,这个问题是为了知道跳过大于 n/2 的数字的原因。你回答了。 :)
【解决方案2】:

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

是的,sqrt(n) 更有效,因为如果a 大于 sqrt(n),那么b 必须更小,而且您已经检查过了。

【讨论】:

    【解决方案3】:

    目的- 表明一个合数的因数(不包括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]}。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2013-07-10
      • 1970-01-01
      • 2023-01-22
      相关资源
      最近更新 更多