LeetCode in Kotlin

2470. Number of Subarrays With LCM Equal to K

Medium

Given an integer array nums and an integer k, return the number of subarrays of nums where the least common multiple of the subarray’s elements is k.

A subarray is a contiguous non-empty sequence of elements within an array.

The least common multiple of an array is the smallest positive integer that is divisible by all the array elements.

Example 1:

Input: nums = [3,6,2,7,1], k = 6

Output: 4

Explanation: The subarrays of nums where 6 is the least common multiple of all the subarray’s elements are:

Example 2:

Input: nums = [3], k = 2

Output: 0

Explanation: There are no subarrays of nums where 2 is the least common multiple of all the subarray’s elements.

Constraints:

Solution

class Solution {
    fun subarrayLCM(nums: IntArray, k: Int): Int {
        var ans = 0
        for (i in nums.indices) {
            var lcm = nums[i]
            for (j in i until nums.size) {
                lcm = lcm * nums[j] / gcd(lcm, nums[j])
                if (lcm == k) {
                    ans++
                }
                if (k % lcm != 0) {
                    break
                }
            }
        }
        return ans
    }

    private fun gcd(a: Int, b: Int): Int {
        return if (b == 0) a else gcd(b, a % b)
    }
}