java中有很多已经实现的方法,不需要我们额外的处理,即已经有了最优解,其中一个便是gcd(greatest common divisor,最大公约数)。
- 说明
- java.math.BigInteger.gcd(BigInteger val)
- 示例
// create 3 BigInteger objects BigInteger bi1, bi2, bi3; // assign values to bi1, bi2 bi1 = new BigInteger("18"); bi2 = new BigInteger("24"); // assign gcd of bi1, bi2 to bi3 bi3 = bi1.gcd(bi2); String str = "GCD of " + bi1 + " and " + bi2 + " is " +bi3; // print bi3 value System.out.println( str );
- 结果
GCD of 18 and 24 is 6
- 力扣相关(6224.最大公因数等于 K 的子数组数目)
给你一个整数数组 nums 和一个整数 k , 请你统计并返回 nums 的子数组中元素的最大公因数等于 k 的子数组数目。 子数组 是数组中一个连续的非空序列。
- 解答
// gcd暴力求解 import java.math.BigInteger; class Solution { public int subarrayGCD(int[] nums, int k) { int count = 0; for (int i = 0; i < nums.length; i++) { BigInteger gcd = BigInteger.ZERO; for (int j = i; j < nums.length; j++) { count += (gcd = gcd.gcd(BigInteger.valueOf(nums[j]))).intValue() == k ? 1 : 0; } } return count; } }