PAT 甲级 1059 Prime Factors

#include 
using namespace std;

const int maxn = 1e5;
bool check[maxn];
int prime[maxn];

int main(){
	// freopen("1059.data", "r", stdin);
	long n; scanf("%ld", &n);
	if(n == 1)
	{
		printf("1=1"); return 0;
	}
	int cnt = 0; // 线性筛法
	for(int i = 2; i * i <= n; i++)
	{
		if(!check[i])
			prime[cnt++] = i;
		for(int j = 0; j < cnt && i*prime[j] <= maxn; j++)
		{
			check[i * prime[j]] = true;  
            if(i % prime[j] == 0) 
            	break;  
		}
	}
	printf("%ld=", n);
	bool first = true; bool flag = true; // flag表示n是否为素数
	for(int i = 0; i < cnt; i++)
	{
		int exp = 0;
		while(n % prime[i] == 0)
		{
			exp++;
			n /= prime[i];
		}
		if(exp)
		{
			if(!first)
				putchar('*'); 
			first = false; 
			flag = false;
		}
		if(exp == 1)
			printf("%d", prime[i]);
		else if(exp > 1)
			printf("%d^%d", prime[i], exp);
	}
	if(flag) // n本身就是素数
		printf("%ld\n", n);
}

你可能感兴趣的:(PAT)