📜  查找给定阵列的LCM与GCD的比率(1)

📅  最后修改于: 2023-12-03 15:10:46.914000             🧑  作者: Mango

查找给定阵列的LCM与GCD的比率

本程序帮助程序员查找给定阵列的LCM与GCD的比率。下面详细介绍本程序的用法和实现。

用法
输入格式

本程序支持多种输入格式:

  1. 在命令行参数中指定阵列元素(例如 ./program 3 6 9);
  2. 从标准输入中读取阵列元素,以回车键分隔各元素(例如 echo -e "3\n6\n9\n" | ./program);
  3. 从文件中读取阵列元素,以回车键分隔各元素(例如 ./program < input.txt)。
输出格式

本程序输出两个整数:LCM与GCD的比率。输出格式为一行两个用空格分隔的整数。例如:

18 3

以上输出表示该阵列的LCM为18,GCD为3,二者的比率为18/3=6。

实现

本程序使用Python语言实现,并采用了以下两种算法:

  1. 求阵列元素的GCD:采用欧几里得算法(最大公约数算法);
  2. 求阵列元素的LCM:采用辗转相除法(最小公倍数算法)。

下面给出Python代码实现。其中 sys.argv 用于获取命令行参数, sys.stdin 用于读取标准输入, math.gcd() 用于求最大公约数。

import sys
import math

def gcd(a: int, b: int) -> int:
    return math.gcd(a, b)

def lcm(a: int, b: int) -> int:
    return a * b // gcd(a, b)

def main():
    arr = sys.argv[1:]
    if not arr:
        arr = [int(x) for x in sys.stdin.read().split()]
    else:
        arr = [int(x) for x in arr]
        
    lcm_val = arr[0]
    gcd_val = arr[0]
    
    for i in range(1, len(arr)):
        lcm_val = lcm(lcm_val, arr[i])
        gcd_val = gcd(gcd_val, arr[i])

    print(lcm_val, gcd_val)

if __name__ == "__main__":
    main()

以上程序采用灵活的输入方式,可以方便地应对不同输入场景。同时,本程序还采用了标准库的函数对最大公约数进行了求解,保证了算法的正确性和效率。