注意范围
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
struct node
{
int x;
int cnt = 0;
}fac[10];
int num = 0;
int prime[MAXN];
bool is_prime(int n)
{
if(n <= 1)
{
return false;
}
else if(n == 2)
{
return true;
}
else
{
for(int i = 2;i * i <= n;i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
}
void init()
{
for(int i = 2;i<=MAXN;i++)
{
if(is_prime(i))
{
prime[num++] = i;
}
}
}
int main(void)
{
freopen("pat0314/in.txt","r",stdin);
int n;
cin>>n;
if(n == 1)
{
printf("1=1\n");
return 0;
}
printf("%d=",n);
init();
int maxindex = 1;
int index = 0;
for(int i = 0;i<num;i++)
{
if(n % prime[i] == 0)
{
fac[index].x = prime[i];
while(n % prime[i] == 0)
{
fac[index].cnt = fac[index].cnt + 1;
n /= prime[i];
}
index++;
}
if(n == 1)
{
break;
}
}
// if(n != 1)
// {
// }
// cout<<maxindex<<endl;
for(int i = 0;i<index;i++)
{
if(i != index - 1 && fac[i].cnt == 1)
{
printf("%d*",fac[i].x);
}
else if(i != index - 1 && fac[i].cnt > 1)
{
printf("%d^%d*",fac[i].x,fac[i].cnt);
}
else if(i == index - 1 && fac[i].cnt > 1)
{
printf("%d^%d",fac[i].x,fac[i].cnt);
}
else if(i == index - 1 && fac[i].cnt == 1)
{
printf("%d",fac[i].x);
}
}
return 0;
}