题意:
把一个整数拆分成多个素数的乘积形式,注意如果为1 直接输出1= 1 测试点4的坑。
先素数打标,然后逐次遍历
#include <iostream>
#include <stdio.h>
using namespace std;
int Prime[10000];
int b[10000];
int num[10000];
int cot=2;
void init()
{
Prime[1]=2;
Prime[2]=3;
for(long long i=4;i<=10000;i++)
{ long long j;
for( j=1;j<=cot;j++)
{
if(i%Prime[j]==0)
{
break;
}
}
if(j==cot+1)
{
Prime[++cot]=i;
}
}
}
int main()
{
init();
long long a;
cin>>a;
printf("%lld=",a);
if(a==1)
{
printf("1\n");
return 0;
}
int len=0;
for(int i=1;i<=cot;i++)
{
if(a%Prime[i]==0)
{
b[++len]=Prime[i];
long long tep=1;
while(a%Prime[i]==0)
{
a=a/Prime[i];
num[len]++;
}
}
if(a==1)
break;
}
for(int i=1;i<=len;i++)
{
if(num[i]!=1)
printf("%d^%d",b[i],num[i]);
else
printf("%d",b[i]);
if(i!=len)
cout<<"*";
}
return 0;
}