①题目中说N是任何long int型的整数,1虽然没有素数因子,但也应该输出1;
②prime数组不能开得比p数组小太多
#include<bits/stdc++.h>
using namespace std;
#define MAXN 999999
long int prime[MAXN];
struct factors{
long int data;
int k=0;
}f[MAXN];
void printprime() //埃氏筛法
{
int p[MAXN]={0},num=0;
for(int i=2;i<MAXN;i++)
{
if(p[i]==0)
{
prime[num++]=i;
for(int j=i+i;j<MAXN;j+=i)
p[j]=1;
}
}
}
int main()
{
long int n,i=0,num=0;
cin>>n;
printf("%ld=",n);
if(n==1)
printf("1");
printprime();
/*while(n!=1)
{
while(n%prime[i]==0)
{
n/=prime[i];
f[num].data=prime[i];
f[num].k++;
}
num++; //prime从2开始但是f最好还是从连续存储吧
i++;
}*/
while(n!=1)
{
if(n%prime[i]==0)
{
while(n%prime[i]==0)
{
n/=prime[i];
f[num].k++;
}
f[num++].data=prime[i];
}
i++;
}
for(i=0;i<MAXN;i++)
{
if(f[i].k!=0)
{
if(i!=0)
printf("*");
if(f[i].k==1)
printf("%ld",f[i].data);
else
printf("%ld^%d",f[i].data,f[i].k);
}
}
printf("\n");
return 0;
}