题解 | #质数因子#

质数因子

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

很容易就会超时,通过下面的例子来试图理解大神们的想法

以例子来理解:

有一个数N,以及她的平方根 /N

N/a==b        ->        a为除数,b为商,,当a、b相等时,有a*a=N;此时平方根即为其因数
                                则以其平方根为界限,若 N%a==0 && a<sqrt(N)则其另一个因数b必然有:  b>sqrt(N) && N%b==0
                                同时 b=N/a        则 N%(N/a)==0            ->     N/(N/a)==c  ->  c==a ....

                                通过上面的分析就可以分析出:a最小的时候就是2,最大的时候就是 a==b == sqrt(N),那么就不再需要判断大于平方根的情况,a大于平方根时的计算就是多余的
                                                                                   b最小的时候就是 b==a == sqrt(N)

                                                                                在循环中a越来越大,越来越逼近算术平方根,到达极限时,这个a就是最接近平方根的数,每次运算都会改变N的值,N此时的值其实就是各次运算的b,
                                                                                b也在越来越向左逼近平方根,当a极限时,我们将a存储上了,但别忘了,各个a的累乘并不等于N,因为你忘了把最靠左的那个b乘进去
                                                                                原因: N/a1=b1    b1/a2=b2 ... -> N==a1*b1==a1*a2*b2 
                                                                                a2、b2两个都是已经极限逼近最后一次平方根(一共平方根了n次)的数

那么问题来咧:为什么a1、a2、a3、a...        以及 bn 是质数呢???明明在循环中的 an 都是自增加一。


难怪大神在每次循环++之前要在if语句中自减1,这样就能保证一堆质数的累乘。
N / 2*2*2*2... 除不尽时,它必然不再会被2整除,此时除数不可能为2的倍数,再往下,假如设S为商
S / 3*3*3*3... 除不尽时,它必然不再会被3整除,此时除数不可能为3的倍数
S / 5*5*5*5... 除不尽时,它必然不再会被5整除,此时除数不可能为5的倍数

依次类推,除数只可能剩下一堆质数
全部评论

相关推荐

心中的变压器:简历需要突出重点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务