算法笔记(c++)--求一个数的所有质数因子

            算法笔记(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没毛病

猜你喜欢

转载自www.cnblogs.com/DJC-BLOG/p/9403954.html
今日推荐