王鹿其 发表于 2023-10-22 10:57:04

c++

编程求一组整数的最大公因子和最小公倍数。

isdkz 发表于 2023-10-22 10:57:16

最大公因子(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数。最小公倍数(Least Common Multiple,简称LCM)是指能够同时被两个或多个整数整除的最小正整数。

在C++中,可以使用欧几里得算法来求取两个整数的最大公因子。以下是一个示例代码:

#include <iostream>

// 求最大公因子
int gcd(int a, int b) {
    while (b != 0) {
      int temp = a % b;
      a = b;
      b = temp;
    }
    return a;
}

// 求最小公倍数
int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

int main() {
    int num1, num2;
    std::cout << "请输入两个整数: ";
    std::cin >> num1 >> num2;

    int gcdResult = gcd(num1, num2);
    int lcmResult = lcm(num1, num2);

    std::cout << "最大公因子: " << gcdResult << std::endl;
    std::cout << "最小公倍数: " << lcmResult << std::endl;

    return 0;
}


这段代码首先定义了两个函数gcd和lcm ,分别用于求取最大公因子和最小公倍数。在gcd函数中,使用了欧几里得算法来迭代求取最大公因子。在lcm函数中,直接利用最大公因子的概念来计算最小公倍数。

在主函数中,首先通过输入获取两个整数,然后分别调用gcd和lcm函数来计算最大公因子和最小公倍数,并将结果输出。

希望这个回答对你有帮助!如果你有任何其他问题,请随时提问。

Mike_python小 发表于 2023-10-22 10:57:30

问题描述:

给定两个整数 a 和 b,求它们的最大公因数和最小公倍数。


解决方案:

1、最大公因数可以使用辗转相除法求解,即:


int gcd(int a, int b) {
    if (a < b) {
      swap(a, b);
    }
    while (b != 0) {
      int r = a % b;
      a = b;
      b = r;
    }
    return a;
}


在上述代码中,我们首先比较 a 和 b 的大小,确保 a >= b。然后使用 while 循环执行辗转相除法求最大公因数,最终返回结果。

2、最小公倍数可以通过最大公因数求出,即:a * b / gcd(a, b)。因此,我们可以在调用 gcd 函数后直接计算得到:


int lcm(int a, int b) {
    return a * b / gcd(a, b);
}


结合上述两个函数,我们可以实现完整的程序:


#include <iostream>
using namespace std;

int gcd(int a, int b) {
    if (a < b) {
      swap(a, b);
    }
    while (b != 0) {
      int r = a % b;
      a = b;
      b = r;
    }
    return a;
}

int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

int main() {
    int a, b;
    cin >> a >> b;

    int max_common_divisor = gcd(a, b);
    int min_common_multiple = lcm(a, b);

    cout << "最大公因数:" << max_common_divisor << endl;
    cout << "最小公倍数:" << min_common_multiple << endl;

    return 0;
}


希望这能帮助到你!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-10-22 10:57:47

在C++中,我们可以使用欧几里得算法(Euclidean Algorithm)来找到两个数的最大公因数(GCD),然后使用这个GCD来找到这两个数的最小公倍数(LCM)。以下是一个简单的C++程序,它可以找到一组整数的最大公因数和最小公倍数:

#include <iostream>
#include <vector>
using namespace std;

// Function to find gcd of a and b
int gcd(int a, int b) {
    if (b == 0)
      return a;
    return gcd(b, a % b);
}

// Function to find lcm of a and b
int lcm(int a, int b) {
    return (a / gcd(a, b)) * b;
}

// Function to find gcd and lcm of a vector of numbers
pair<int, int> findGCDAndLCM(vector<int> numbers) {
    int n = numbers.size();
    int resultGCD = numbers;
    int resultLCM = numbers;

    for (int i = 1; i < n; i++) {
      resultGCD = gcd(numbers[ i], resultGCD);
      resultLCM = lcm(resultLCM, numbers[ i]);
    }

    return make_pair(resultGCD, resultLCM);
}

int main() {
    vector<int> numbers = {2, 7, 3, 9, 4};
    pair<int, int> result = findGCDAndLCM(numbers);

    cout << \"GCD: \" << result.first << endl;
    cout << \"LCM: \" << result.second << endl;

    return 0;
}


这个程序首先定义了两个函数,一个用于计算两个数的最大公因数,另一个用于计算两个数的最小公倍数。然后,它定义了一个函数,该函数接受一个整数向量,并使用前面定义的函数来找到这个向量中所有数的最大公因数和最小公倍数。最后,主函数创建了一个整数向量,调用了findGCDAndLCM函数,并打印出结果。

请注意,这个程序假设输入的整数向量至少包含一个元素,并且所有的元素都是正整数。如果这些假设不成立,你可能需要对程序进行一些修改。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

柿子饼同学 发表于 2023-10-22 15:24:28

int gcd(int a, int b){
    if(!b) return a;
    return gcd(b, a % b);
}

int lcm(int a, int b){
    return a*b / gcd(a, b);
}
页: [1]
查看完整版本: c++