质因数分解逆序输出(C++)
时间: 2023-05-25 09:05:30 浏览: 75
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PRIME_NUM 100 // 素数表的最大长度
void get_prime_list(int *list, int n) {
/*
* 通过筛法求 n 以内的素数表
* list: 存放求得的素数表
* n: 求 n 以内的素数表
*/
int nums[n+1];
int i, j;
for (i = 2; i <= n; i++) {
nums[i] = 1;
}
for (i = 2; i < n; i++) {
if (nums[i] == 1) {
*list++ = i;
}
for (j = 0; j < list[-1] && i*list[j] <= n; j++) {
nums[i*list[j]] = 0;
if (i % list[j] == 0) {
break;
}
}
}
}
int main() {
int n, i, j, k;
int prime_list[MAX_PRIME_NUM]; // 存放素数表
scanf("%d", &n);
get_prime_list(prime_list, n);
for (i = 2; i <= n; i++) {
int tmp = i;
printf("%d=", i);
for (j = 0; j < MAX_PRIME_NUM && prime_list[j]; j++) { // 循环直到素数表结束
while (tmp % prime_list[j] == 0) {
printf("%d", prime_list[j]);
tmp /= prime_list[j];
if (tmp != 1) {
printf("*");
}
}
}
if (tmp > 1) { // 如果 i 是质数,则质因子里面只有 i 本身
printf("%d", tmp);
}
printf("\n");
}
return 0;
}
```
阅读全文