两种方法,第一种是将所有的素数筛选出来,第二种直接循环就行了(第二种更加的高效)。
第一种方法其实就是先将素数筛选出来然后再计算,第二种是直接计算。
第一种的代码
#include<bits/stdc++.h>
using namespace std;
const int Max = 1e7+7;
bool prim[Max];
vector <int> ve;
//素数筛选
void pre_prim()
{
for(int i=2;i*i<=Max;i++)
{
if(!prim[i])
{
ve.push_back(i);
for(int j=i;j<Max;j+=i)
prim[j] = true;
}
}
}
int main()
{
pre_prim();
long long n;
while(~scanf("%lld",&n))
{
vector<int>::iterator iter;
for(iter=ve.begin();iter!=ve.end();iter++)
{
if(n%*iter == 0)
{
while(n%*iter == 0)
{
printf("%d ",*iter);
n /= *iter;
}
}
}
if(n!=1)
printf("%lld",n);
printf("\n");
}
}
第二种方法的代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
while(~scanf("%lld",&n))
{
for(int i=2;i*i<=n;i++)
{
if(n%i == 0)
{
while(n%i == 0)
{
printf("%d ",i);
n/=i;
}
}
}
if(n!=1)
printf("%lld",n);
printf("\n");
}
return 0;
}