[英]finding all prime factors of a number
该程序计算否的所有因素。 首先找到所有质因数,然后将它们的指数加 1,然后将它们相乘。 但是在 for 循环中,我在每次迭代中都会增加 2。这是不是错误,因为在 7 之后它会增加到 9 这不是素数? 还是我错了? 谁能解释一下!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
cin>>n;
int factors=1,exponen=0;//exponent stores power of current prime
while(n%2==0)//a separate check for 2 {
exponen++;
n=n/2;
}
factors= factors*(exponen+1);
exponen=0;
int original_n=n;
for(i=3;n>1 && i<=sqrt(original_n);i+=2)//Checking for every prime number
{
exponen=0;
while(n%i==0)
{
exponen++;
n=n/i;
}
factors= factors*(exponen+1);
}
cout<< factors<< endl;
return 0;
}
while(n%i==0)
{
exponen++;
n=n/i;
}
该循环从n
删除(并计算)所有i
因子,直到没有剩余。
因此,当您达到9
您已经去除了3
所有幂,因此此时9
永远不会除以n
:算法有效
注意:此方法不是最有效的方法,循环使用 Erathostenes 筛生成的实际素数列表可以加快速度,因为没有对每个奇数进行测试,仅对素数进行测试(循环不能那么容易避免, 尽管)
我不确定它是计算还是数学。
但是如果i
是复合的,它永远不会除以n
的当前值。 那是因为合数i
所有质因数都已经被访问过并“除”了n
。
9是特例。 任何 3 的因数都被除掉了,所以当i
达到 9 时n%i==0
永远不会为真。
类似地,当它达到 15 时,3 和 5 的因数已被除掉, n%15==0
将为假。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.