题目链接: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 = p1 ^ k1 * p2 ^ k2 ⋯ pm ^ km.
输入
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 = p1 ^ k1 * p2 ^ k2*… * pm ^ km, where pi’s are prime factors of N in increasing order, and the exponent ki is the number of pi – hence when there is only one pi, ki is 1 and must NOT be printed out.
样例输入
97532468
样例输出
97532468=2^211171011291
代码
#include <stdio.h>
#include <math.h>
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;
}