解题思路:
用筛法先把可能用到的素数找出来,再用求得的素数去除原数,获取结果即可。
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
const int maxn = 50000;
int Prime[maxn], cnt[maxn];
vector<int> prime;
int main()
{
int n;
while(scanf("%d", &n) == 1)
{
if(n == 1) {printf("1=1\n"); continue;}
memset(Prime, 0, sizeof(Prime));
memset(cnt, 0, sizeof(cnt));
int l = sqrt(n) + 1;
for(int i = 2; i <= l; i++)
{
if(Prime[i]) continue;
else
for(int j = i*2; j <= l; j += i) Prime[j] = 1;
}
for(int i = 2; i < l; i++) if(!Prime[i]) prime.push_back(i);
printf("%d=", n);
for(int i = 0; i < prime.size(); i++)
{
while(n % prime[i] == 0)
{
cnt[i]++;
n /= prime[i];
}
}
int first = 1;
for(int i = 0; i < prime.size(); i++)
{
if(cnt[i] > 0 && first) {printf("%d", prime[i]); first = 0;}
else if(cnt[i] > 0) printf("*%d", prime[i]);
if(cnt[i] > 1) printf("^%d", cnt[i]);
}
if(n > l) printf("%d", n); //说明n本身就是一个素数
printf("\n");
}
return 0;
}