题解 | 质数因子

质数因子

https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

咋基本上所有人都在说质因子不会超过平方根。。。这是错的

106=2*53,

106有质因子53,显然大于根号106

93938=3613 × 2 × 13

93938有质因子3613,显然大于根号93938(约等于306)

正确表述是:

一个合数至少有一个不超过它算术平方根的质因数。

而相关代码能正确工作的原理是:任何合数,在不断除掉所有不超过平方根的因子之后,剩下的数要么是 1,要么一定是一个质数。证明为:

试除质因子的循环结束后,有两种情况:

情况 1:t == 1

  • 所有质因子都 ≤ √n
  • 已经被完全分解

情况 2:t > 1

这时要证明两件事:

(1)t 一定是质数

假设 t 是合数:t = a × b

那么必有:a ≤ √t ≤ √n

但:所有 ≤ √n 的因子在 for 循环中都已经被除尽,矛盾

所以 t 不可能是合数,只能是质数

(2)t 不可能再有两个因子

如果还剩两个 > √n 的因子:p × q > √n × √n = n,矛盾

所以只可能剩一个

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务