题目注意点
- 记得要在main函数里调用findPrime函数
- findPrime函数里要写成i < maxn
- 要特判n = 1的情况,输出1 = 1
实现
打印素数表时可以用埃氏筛法,也可以用直接遍历2~maxn的每个数判断是否是素数的方法
#include <stdio.h>
#include <math.h>
const int maxn = 100010;
int prime[maxn], pNum = 0;
bool p[maxn] = {0};
struct factor {
int x, cnt;
}fac[10];
void findPrime() {
for (int i = 2; i < maxn; i++) {
if (p[i] == false) {
prime[pNum++] = i;
for (int j = i + i; j < maxn; j += i) {
p[j] = true;
}
}
}
}
int main() {
findPrime();//记得调用函数
int n, num = 0;//num是不同质因子的个数
scanf("%d", &n);
if (n == 1) {
printf("1=1\n");
return 0;
}
printf("%d=", n);
int sqr = (int)sqrt(n);
int i = 0;
while (prime[i] <= sqr) {
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++;
}
i++;
}
if (n != 1) {//当有大于sqrt(n)的质因子时
fac[num].x = n;
fac[num++].cnt = 1;
}
//输出
for (int i = 0; i < num; i++) {
if (i) printf("*");
printf("%d", fac[i].x);
if (fac[i].cnt > 1) {
printf("^%d", fac[i].cnt);
}
}
printf("\n");
return 0;
}