给你一个整数数组 nums 和一个整数 k ,请你统计并返回 nums 的 子数组 中满足 元素最小公倍数为 k 的子数组数目。
子数组 是数组中一个连续非空的元素序列。
数组的最小公倍数 是可被所有数组元素整除的最小正整数。
class Solution {
public static int subarrayLCM(int[] nums, int k) {
int ans = 0;
for (int i = 0; i < nums.length; i++) {
int sum = 0;
for (int j = i;j<nums.length;j++){
if ((nums[j]!=1)&&(gcd(lcm(1,nums[j]),k)==1||gcd(lcm(sum,nums[j]),k)==1)) break;
if (lcm(1,nums[j])>k||lcm(sum,nums[j])>k) break;
if (sum == 0){
if (lcm(1,nums[j]) == k){
ans++;
}
sum = lcm(1,nums[j]);
}else{
if(lcm(sum,nums[j]) == k){
ans++;
}
sum = lcm(sum,nums[j]);
}
}
}
return ans;
}
public static int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
public static int lcm(int a,int b){
return (a * b)/gcd(a,b);
}
}