1. 程式人生 > >PAT 1059 Prime Factors (25 分)

PAT 1059 Prime Factors (25 分)

在這裡插入圖片描述



解析

#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 */