分解成指数幂乘积的形式
我的代码
可以算到到n=10e12
#include<iostream>
using namespace std;
int prime[10000005],a[10000005];
long long inz[100000],gs[100000];
int getprime(long long n)
{
int cnt=0;
for(int i=2;i<n;i++)
{
if(a[i]==0) prime[cnt++]=i;
for(int j=0;j<cnt&&prime[j]*i<n;j++)
{
a[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
return cnt;
}
int fj(long long n)
{
int k=0;
int cnt=getprime(10000000);
for(int i=0;i<cnt;i++)
{
if(n%prime[i]==0)
{
while(n%prime[i]==0)
{
inz[k]=prime[i];///储存质因子
gs[k]++;///储存个数
n/=prime[i];
}
k++;
}
if(n==1) break;
}
if(n!=1) {inz[k]=n;gs[k]=1;}
k++;
return k;
}
int main()
{
long long n;cin>>n;
int cnt=fj(n);
for(int i=0;i<cnt;i++)
{
if(i>0&&inz[i]!=0)cout<<'*';
if(inz[i]!=0){
cout<<inz[i]<<'^'<<gs[i];
}
}
cout<<endl;
return 0;
}