📜  Java程序在数组中查找给定索引范围的 GCD(1)

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

Java程序在数组中查找给定索引范围的 GCD

本文介绍了如何使用Java编写一个程序,在给定的索引范围内查找数组中的最大公约数(GCD)。

问题描述

给定一个包含正整数的数组arr和两个索引left和right。要求在arr的子数组arr[left...right]中查找最大公约数。

解决方案

我们可以使用欧几里得算法来计算两个整数的最大公约数。这个算法基于如下原则:

  1. 如果a整除b,则a是a和b的最大公约数。
  2. 否则,将a除以b得到余数r,将b更新为原来的a,将r更新为新的b,然后回到步骤1。
Java代码实现

下面是一个实现查找最大公约数的Java代码片段。代码片段中包含了一个findGCD方法,该方法接收一个整型数组arr、左索引left和右索引right作为输入,并返回该范围内的最大公约数。

public class GCD {
    public static int findGCD(int[] arr, int left, int right) {
        if (left > right || left < 0 || right >= arr.length) {
            throw new IllegalArgumentException("Invalid index range");
        }
        
        int result = arr[left];
        for (int i = left + 1; i <= right; i++) {
            result = gcd(result, arr[i]);
        }
        
        return result;
    }
    
    private static int gcd(int a, int b) {
        if (b == 0) {
            return a;
        }
        
        return gcd(b, a % b);
    }
}
使用示例

现在,我们来看一个用例,展示如何使用上述代码片段查找数组中给定索引范围内的最大公约数。

public class Main {
    public static void main(String[] args) {
        int[] arr = {12, 24, 36, 48, 60};
        int left = 1;
        int right = 3;
        
        int gcd = GCD.findGCD(arr, left, right);
        System.out.println("The GCD in the range [" + left + ", " + right + "] is: " + gcd);
    }
}

输出结果:

The GCD in the range [1, 3] is: 12
总结

本文介绍了如何使用Java编写一个程序,在给定的索引范围内查找数组中的最大公约数。通过使用欧几里得算法,我们能够高效地计算最大公约数。希望本文能帮助到你!