C++ 求一个数的所有素数因子

C++ 求一个数的所有素数因子,c++,C++,这个程序计算一个数的所有因子。首先找到所有的素因子,将它们的指数加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

这个程序计算一个数的所有因子。首先找到所有的素因子,将它们的指数加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;
}
#包括
使用名称空间std;
int main()
{
int n,i;
cin>>n;
int factors=1,exponen=0;//指数存储当前素数的幂
while(n%2==0)//对2进行单独检查{
exponen++;
n=n/2;
}
系数=系数*(指数+1);
指数=0;
int原始值n=n;
对于(i=3;n>1&&i)
该循环从
n
中删除(并计数)所有
i
因子,直到没有剩余因子为止

因此,当您达到
9
时,您已经删除了
3
的所有幂,因此
9
在这一点上永远不会对
n
进行除法:算法有效


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

我不确定是计算还是数学

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

9是一种特殊情况。3的任何因素都已被划分,因此
n%i==0
i
达到9时将永远不会为真


同样地,当它达到15时,3和5的因子被除掉,并且
n%15==0
将为假。

由于循环在
i
等于
3
之前
i
等于
9
,并且反复除以
3
时工作,因此
n%i==0
测试在
i
完成时将永远不会为真
9
。顺便说一句,
我可以指导您使用Erathostenes素数生成算法的筛选
    while(n%i==0)
    {
        exponen++;
        n=n/i;
    }