众所周知,检查数字是否为' n'是否是素数我们只需要检查它是否有一个小于n的平方根的因子。
我的问题是,检查所有小于n的平方根的素数是否足够。
答案 0 :(得分:3)
每个 n 大于1的整数都是素数本身或者是素数(Fundamental theorem of arithmetic)的乘积。因此,如果 n 不是素数本身,它必须能被至少两个素数整除。其中至少有一个必须小于或等于√ n (否则他们的产品将大于 n ),所以这就足够了检查所有小于或等于√ n 的素数。
答案 1 :(得分:0)
我们可以这样说:
让要检查的号码为n
。设有一个k <= sqrt(n)
的分号n
。现在,我们可以按如下方式编写k
:
k = (p_1^a_1)(p_2^a_2)...(p_x^a_x)
其中p_1, p_2, ..., p_x
是素数小于或等于k
和a_1, a_2, ..., a_x >= 1
。现在,由于k
除了n
,并且因为我们知道p_1, p_2, ..., p_x
除k
,所以我们可以推导出p_1, p_2, ..., p_x
除n
。因此,为了证明n
是非素数,只需检查是否有任何素数<= sqrt(n)
除以n
。
答案 2 :(得分:0)
是的,你所说的绝对正确。
您只需检查所有小于等于squareRoot(n)
的素数,但重点是您不知道该数字是否为素数。所以,你遍历到squareRoot(n)
答案 3 :(得分:0)
是的,只需要检查因子减去sqrt(n)。但是这个算法有点慢。我有另一个更好的算法叫Miller_Rabin_primality My previous project code Source code
以下是Wiki