算法笔记(c++)--求一个数的所有质数因子
先贴题目:
这题不难,恶心在理解上面。最后看评论知道了怎么回事:
2*2*3*3*5=180
按照这逻辑的话应该输入的数由一系列质数相乘出来,所以每次找到一个质数就要更新下输入数.。
问题1:
没问题的话一瞬间都是这么想的。更新后重新来一遍for。重新探索一遍质数。但是仔细想想,题目要求从小到大,能2*3*2就一定能2*2*3,不如每次找到一个质数因子的时候,循环更新输入数。
解决如下
while(num%质数因子==0)
num=num/质数因子.
问题2:
比如10我们计算用for( 2 to sqrt num)过程就是这样 2-num=5. 5无法再没有(2, sqrt(num)】内的质数因子了.就直接退出了。
所以我们最后判断假如num最后大于1--如果1的话说明已经结束了
大于1就把num再次输出.
按照我们的逻辑来随便看个数字比如99
首先3-num=33
然后3-num=11
然后11-num=1
=>3 3 11没毛病