如何在C语言的GCD、LCM代码中添加质因数分解及倍数序列打印
以下是针对需求给出的C语言代码实现方案:
一、添加质因数分解功能的GCD程序
原GCD程序通过遍历寻找最大公约数,现在新增质因数分解打印功能,我们可以封装一个质因数分解打印函数,在获取输入后调用它。
修改后的完整代码
#include <stdio.h> // 打印单个数字的质因数分解 void printPrimeFactors(int num) { int original = num; printf("Num : %d = ", original); int firstFactor = 1; // 从最小质数2开始试除,寻找质因数 for (int i = 2; i <= num; i++) { while (num % i == 0) { if (!firstFactor) { printf(" x "); } printf("%d", i); num /= i; firstFactor = 0; } } printf("\n"); } int main() { int n1, n2, i, gcd; printf("Enter two integers: "); scanf("%d %d", &n1, &n2); // 打印两个数的质因数分解 printPrimeFactors(n1); printPrimeFactors(n2); // 原GCD计算逻辑 for(i=1; i <= n1 && i <= n2; ++i) { if(n1%i==0 && n2%i==0) gcd = i; } printf("G.C.D of %d and %d is %d\n", n1, n2, gcd); return 0; }
关键说明
printPrimeFactors函数:从最小质数2开始试除目标数字,每次找到能整除的因数就打印,同时将数字除以该因数,重复直到数字变为1;- 通过
firstFactor变量控制格式,避免开头或末尾出现多余的x符号; - 在获取输入后直接调用两次该函数,分别打印两个数的质因数分解。
二、添加倍数序列和公共倍数的LCM程序
原LCM程序通过递增寻找最小公倍数,现在新增两个数的倍数序列、公共倍数列表打印功能,我们可以封装倍数打印函数,并利用LCM的特性(公共倍数是LCM的倍数)来实现。
修改后的完整代码
#include <stdio.h> // 打印数字的前count个倍数 void printMultiples(int num, int count) { printf("%d : ", num); for (int i = 1; i <= count; i++) { printf("%d", num * i); if (i != count) { printf(", "); } } printf("...\n"); } int main() { int n1, n2, max, lcm; printf("Enter two integers: "); scanf("%d %d", &n1, &n2); // 原LCM计算逻辑 max = (n1 > n2) ? n1 : n2; while (1) { if ((max % n1 == 0) && (max % n2 == 0)) { lcm = max; break; } ++max; } // 打印两个数的前4个倍数(可自行调整count值) printMultiples(n1, 4); printMultiples(n2, 4); // 打印前3个公共倍数(可自行调整count值) printf("Common Multiple = "); for (int i = 1; i <= 3; i++) { printf("%d", lcm * i); if (i != 3) { printf(", "); } } printf("...\n"); printf("The LCM of %d and %d is %d.\n", n1, n2, lcm); return 0; }
关键说明
printMultiples函数:接收数字和要打印的倍数数量,循环计算并打印每个倍数,通过判断控制逗号格式;- 公共倍数利用数学特性:两个数的所有公共倍数都是最小公倍数的倍数,因此直接用LCM乘以1、2、3...即可得到;
- 代码中默认打印前4个单独倍数和前3个公共倍数,你可以根据需求修改
count参数调整数量。
内容的提问来源于stack exchange,提问作者sl0th
相关产品推荐
相关产品推荐

