如何用C语言编写一个程序来计算并显示正整数n的所有可能划分(即分解成不同质因数的乘积),同时展示每个划分的具体等式?另外,请提供一个版本来记录并显示整个过程的运行时间。
时间: 2024-09-14 12:10:32 浏览: 41
在C语言中,我们可以使用递归的方式来编写一个程序,找出所有正整数n的质因子分解。以下是核心的代码片段:
```c
#include <stdio.h>
#include <stdbool.h> // 使用布尔类型
// 检查是否为质数
bool is_prime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
// 找出n的所有质因子分解
void prime_factors(int n, int factor, int current_product, int* result[], int count) {
if (factor > n) { // 当因子大于n时,结束递归
if (current_product > 1 && is_prime(current_product)) {
result[count++] = ¤t_product; // 如果当前产品是质数,则添加到结果数组
}
return;
}
// 尝试将n除以factor
prime_factors(n, factor, current_product, result, count);
prime_factors(n, factor + 1, current_product * factor, result, count); // 否则尝试下一个因子
}
// 显示分解结果
void display_factors(int factors[], int count) {
printf("分解等式: ");
for (int i = 0; i < count; i++) {
printf("%d ", factors[i]);
if (i != count - 1) {
printf("*");
}
}
printf("\n");
}
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
int factors[n];
int count = 0;
clock_t start = clock(); // 记录开始时间
prime_factors(n, 2, 1, factors, count);
clock_t end = clock(); // 记录结束时间
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC; // 转换为秒
printf("计算时间为: %.4f 秒\n", time_taken);
display_factors(factors, count);
return 0;
}
```
阅读全文