找到一个数字的所有素因子

时间:2017-09-28 07:46:44

标签: c++

该程序计算所有因素。通过首先找到所有素因子并将1加到它们的指数然后将它们相乘。但是在for循环中,i在每次迭代中都会增加2。这是错误的,因为在7之后它会增加到9而不是素数? 还是我错了?任何人都可以解释一下!

setInveral

2 个答案:

答案 0 :(得分:1)

    while(n%i==0)
    {
        exponen++;
        n=n/i;
    }

该循环从i删除(并计算)所有n个因子,直到没有剩余。

因此,当您到达9时,您已经删除了3的所有权力,因此此时9永远不会将n分开:算法有效

注意:这个方法不是最有效的方法,循环使用Erathostenes筛子生成的实际素数列表可以加快速度,因为没有测试每个奇数,只有素数(循环不能但是很容易避免)

答案 1 :(得分:0)

我不确定它是计算还是数学。

但如果i是复合的,它将永远不会除以n的当前值。 这是因为复合数i的所有素数因子已经被访问过并且被n“分开”。

9是一个特例。任何3的因子都已被划分,因此n%i==0i达到9时永远不会成立。

同样,当它达到15时,3和5的因子被分开,n%15==0将是假的。