题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1059
// 注意输入数据为1时特殊处理
// 采取常规方法,先求出“所有”素数,再一次遍历。
// 符合条件者入vector,最后输出。
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <limits.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define SIZE 10000+10
using namespace std;
struct Node
{
int prime;
int num;
};
vector<Node> ans;
vector<int> primes;
bool is_prime(int x)
{
if(x == 2)
return true;
else
{
int y = (int)sqrt(x);
for( ; x%y != 0; y--)
;
return y == 1;
}
}
void init_primes(long a)
{
int i;
for(i=2; i <= 9000; i++)
{
if(is_prime(i) == true)
{
primes.push_back(i);
}
}
}
void output()
{
int i;
for(i=0; i<ans.size()-1; i++)
{
printf("%d", ans[i].prime);
if(ans[i].num > 1)
{
printf("^%d", ans[i].num);
}
printf("*");
}
printf("%d", ans[i].prime);
if(ans[i].num > 1)
{
printf("^%d", ans[i].num);
}
printf("\n");
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("E:\\in.txt", "r", stdin);
#endif
long int a;
int pre=-1;
scanf("%ld", &a);
printf("%d=", a);
if(a == 1)
{
printf("%ld\n", a);
return 0;
}
init_primes(a);
// processing
int i;
for(i=0; i<primes.size()-1 && a != 1; i++)
{
int k=0;
while(a%primes[i] == 0)
{
k++;
a = a/primes[i];
}
if(k > 0)
{
Node t;
t.num = k;
t.prime = primes[i];
ans.push_back(t);
}
}
output();
return 0;
}