PAT A1059 Prime Factors (25分)

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488

题目描述
Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p​1 ^ ​​​k​1 ​​​​* p​2​​​ ^ k​2​​​​ p​m ^ ​​​k​m​​​​.

输入
Each input file contains one test case which gives a positive integer N in the range of long int.

输出
Factor N in the format N = p​1​​ ^ k​1 * p​2 ​​^ k​2​​*… * p​m ​​^ k​m​​, where p​i​​’s are prime factors of N in increasing order, and the exponent k​i​​ is the number of p​i​​ – hence when there is only one p​i​​, k​i​​ is 1 and must NOT be printed out.

样例输入
97532468

样例输出
97532468=2^211171011291

代码

#include 
#include 

const int  maxn = 100010;
int prime[maxn], pNum = 0;
bool p[maxn] = {0};

struct factor {
	int x;
	int cnt;
}fac[10];

void find_primr(int n) {
	int sqr = (int)sqrt(1.0 * n);
	for(int i = 2; i <= sqr; i++) {		
		if(p[i] == false) {
			prime[pNum++] = i;
			for(int j = i + i; j <= sqr; j += i) 
				p[j] = true;			
		}
	}
}

int main() {
	int n, num = 0;
	scanf("%d", &n);
	if(n == 1)
		printf("1=1");
	else{
		find_primr(n);
		printf("%d=", n);
		int sqr = (int)sqrt(1.0 * n);
		for(int i = 0; i < pNum; i++){ 	
			if(n % prime[i] == 0) {
				fac[num].x = prime[i];
				fac[num].cnt = 0;		
				while(n % prime[i] == 0){
					fac[num].cnt++;
					n /= prime[i];
				}
				num++;
			}
			if(n == 1)
				break;
		}
		if(n != 1) {
			fac[num].x = n;
			fac[num++].cnt = 1;
		}
		for(int i = 0; i < num; i++) {
			if(i > 0)
				printf("*");
			printf("%d", fac[i].x);
			if(fac[i].cnt > 1)
				printf("^%d", fac[i].cnt);
		}
	}
	return 0;
}

你可能感兴趣的:(PAT)