PAT 1059 Prime Factors (25 分)
阿新 • • 發佈:2018-12-02
解析
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
vector<bool> prime;
vector<int> PNum;
struct factor {
int x, cnt;
}fac[10];
void makePrime(int N){
prime.resize(N+1, false);
for (int i = 2; i <= N; i++) {
if (prime[i] == false ) {
PNum.push_back(i);
for (int j = i + i; j <= N; j += i)
prime[j] = true;
}
}
}
int main()
{
int N;
scanf("%d", &N);
if (N == 1)
printf("1=1");
else {
int SQRT = (int)sqrt(N*1.0), num = N, go = 0;
makePrime(SQRT);
for (int i = 0; i < PNum.size() && PNum[i] <= SQRT; i++) {
if (num%PNum[i] == 0) {
fac[go].x = PNum[i];
while (num%PNum[i] == 0) {
fac[go].cnt++;
num /= PNum[i];
}
go++;
}
}
if (num != 1) {
fac[go].x = num;
fac[go++].cnt = 1;
}
printf("%d=", N);
for (int i = 0; i < go; i++) {
if (fac[i].cnt == 1 )
printf("%d%c", fac[i].x, i == go - 1 ? '\n' : '*');
else
printf("%d^%d%c", fac[i].x, fac[i].cnt, i == go - 1 ? '\n' : '*');
}
}
}
/*
97532468
*/