编写c程序,将n!(n的阶乘)分解成素数因子,尽量用二维数组,关键代码给出注释,要求代码简洁
时间: 2023-10-25 15:09:48 浏览: 87
下面是一个简洁的 C 语言程序,用于将 n! 分解成素数因子:
```c
#include <stdio.h>
#define MAX_PRIME 1000 // 素数表的大小
int primes[MAX_PRIME]; // 存储素数的数组
int factors[MAX_PRIME][2]; // 存储因子的二维数组
int main() {
int n, i, j, k;
int count = 0; // 记录素数的个数
scanf("%d", &n);
// 生成素数表
for (i = 2; i <= n; i++) {
int is_prime = 1;
for (j = 2; j * j <= i; j++) {
if (i % j == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
primes[count++] = i;
}
}
// 分解因子
for (i = 0; i < count; i++) {
factors[i][0] = primes[i]; // 记录素数
factors[i][1] = 0; // 初始化指数为0
for (j = primes[i]; j <= n; j *= primes[i]) {
factors[i][1] += n / j; // 累加指数
}
}
// 输出结果
printf("%d! = ", n);
for (i = 0; i < count; i++) {
if (factors[i][1] == 0) continue; // 如果指数为0则跳过
printf("%d^%d", factors[i][0], factors[i][1]);
if (i != count - 1) {
printf(" * ");
}
}
printf("\n");
return 0;
}
```
程序中使用了两个数组:`primes` 和 `factors`。`primes` 数组用于存储 2~n 之间的素数,`count` 变量用于记录素数的个数;`factors` 数组用于存储 `n!` 的素数因子分解结果,每一行记录一个素数及其指数。
首先程序生成素数表,然后根据素数表分解 `n!` 的因子。具体来说,对于素数表中的每一个素数,程序计算出它在 `n!` 中的指数,然后存储到 `factors` 数组中。最后程序输出 `n!` 的素数因子分解结果。
值得注意的是,程序使用了两重循环来计算素数和因子,但是代码简洁易懂,不会让人感到混乱。
阅读全文