思路见这个帖子。
#include<algorithm>
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,sz[100000005],cnt=1;
bool a[100000005];
bool isprime(long long x)
{
if(x==2) return true;
for(long long i=2;i*i<=x;i++)
{
if(x%i==0) return false;
}
return true;
}
void work(long long x)
{
long long sum=0,o=0;
while(n>1)
{
cnt++,sum=0;
if(o==1) printf("*");
while(n%sz[cnt]==0)
{
sum++;
n=n/sz[cnt];
}
if(sum==0)
{
o=0;
continue;
}
if(sum!=1) printf("%lld^%lld",sz[cnt],sum);
else printf("%lld",sz[cnt]);
o=1;
}
}
int main()
{
scanf("%lld",&n);
if(isprime(n)==true)
{
printf("%lld=%lld",n,n);
return 0;
}
for(int i=3;i*i<=100000000;i+=2)
{
if(a[i]==0)
{
int t=100000000/i;
for(int j=2;j<=t;++j)
{
a[i*j]=1;
}
}
}
sz[1]=2;
for(int i=2;i<=100000000;++i)
{
if(a[i]==0)
{
cnt++;
sz[cnt]=i;
}
}
cnt=0;
printf("%lld=",n);
work(n);
return 0;
}
RT。求 Hack 。