简介
在本实验中,你将学习如何使用 C 程序将一个整数分解为其质因数。本实验涵盖以下步骤:
- 从用户那里读取一个整数输入。
- 实现一种算法,用质数除输入的数字,直到它被完全分解。
- 打印输入数字的质因数。
完成本实验后,你将对在 C 语言中处理整数、质数和基本编程概念有更好的理解。
读取一个整数
在这一步中,你将学习如何在一个用于质因数分解的 C 程序中从用户那里读取一个整数输入。我们将创建一个简单的程序,提示用户输入一个数字并存储它以供进一步处理。
首先,让我们在 ~/project 目录中创建一个新的 C 文件:
cd ~/project
nano prime_factorization.c
现在,添加以下代码来读取一个整数:
#include <stdio.h>
int main() {
int number;
printf("Enter a positive integer to factorize: ");
scanf("%d", &number);
printf("You entered: %d\n", number);
return 0;
}
让我们来分析一下这段代码:
#include <stdio.h>包含标准输入/输出库int main()是程序执行开始的主函数printf()用于向用户显示一个提示scanf()从用户读取整数输入%d是整数的格式说明符&number传递number变量的内存地址
编译并运行该程序:
gcc prime_factorization.c -o prime_factorization
./prime_factorization
示例输出:
Enter a positive integer to factorize: 24
You entered: 24
用质数相除直到完全分解
在这一步中,你将修改之前的程序以实现质因数分解算法。我们将更新 prime_factorization.c 文件,用质数除输入的数字,直到它被完全分解。
打开现有文件:
cd ~/project
nano prime_factorization.c
用以下实现替换之前的代码:
#include <stdio.h>
void factorize(int number) {
printf("Prime factors of %d: ", number);
// 从最小的质数开始
for (int divisor = 2; divisor <= number; divisor++) {
while (number % divisor == 0) {
printf("%d ", divisor);
number /= divisor;
}
}
printf("\n");
}
int main() {
int number;
printf("Enter a positive integer to factorize: ");
scanf("%d", &number);
// 检查输入是否有效
if (number <= 1) {
printf("请输入一个大于 1 的数字。\n");
return 1;
}
factorize(number);
return 0;
}
让我们来分析一下质因数分解算法:
factorize()函数处理质因数分解过程- 我们从最小的质数(2)开始
- 外层
for循环尝试每个可能的除数 - 内层
while循环用当前除数反复除该数字 - 找到每个质因数时我们将其打印出来
- 在每次迭代中,数字通过整数除法进行更新
编译并运行程序:
gcc prime_factorization.c -o prime_factorization
./prime_factorization
示例输出:
Enter a positive integer to factorize: 24
Prime factors of 24: 2 2 2 3
Enter a positive integer to factorize: 100
Prime factors of 100: 2 2 5 5
打印质因数
在这一步中,你将改进质因数分解程序,以提供更详细且格式化的质因数输出。我们将修改现有的 prime_factorization.c 文件来改善结果的呈现方式。
打开文件:
cd ~/project
nano prime_factorization.c
用一个改进的分解函数更新代码:
#include <stdio.h>
void factorize(int number) {
int original_number = number;
int factor_count = 0;
printf("Prime Factorization of %d:\n", original_number);
printf("---------------------\n");
// 从最小的质数开始
for (int divisor = 2; divisor <= number; divisor++) {
int current_factor_count = 0;
while (number % divisor == 0) {
number /= divisor;
current_factor_count++;
factor_count++;
}
// 打印带有指数的因数
if (current_factor_count > 0) {
printf("%d^%d ", divisor, current_factor_count);
}
}
printf("\n\nTotal number of prime factors: %d\n", factor_count);
}
int main() {
int number;
printf("Enter a positive integer to factorize: ");
scanf("%d", &number);
// 检查输入是否有效
if (number <= 1) {
printf("请输入一个大于 1 的数字。\n");
return 1;
}
factorize(number);
return 0;
}
此版本的主要改进:
- 添加了格式化以显示质因数
- 显示每个质因数的指数
- 计算质因数的总数
- 保留原始输入数字以供显示
编译并运行程序:
gcc prime_factorization.c -o prime_factorization
./prime_factorization
示例输出:
Enter a positive integer to factorize: 24
Prime Factorization of 24:
---------------------
2^3 3^1
Total number of prime factors: 4
Enter a positive integer to factorize: 100
Prime Factorization of 100:
---------------------
2^2 5^2
Total number of prime factors: 4
总结
在本实验中,你将学习如何从用户那里读取整数输入、实现质因数分解算法以及打印给定数字的质因数。关键步骤包括读取整数、用质数除该数字直到它被完全分解,以及打印质因数。
程序首先提示用户输入一个正整数,然后将其存储在一个变量中。质因数分解算法在 factorize() 函数中实现,在该函数中,输入的数字被质数除,直到它被完全分解。然后将质因数打印到控制台。



