思路:首先理解题意,就是输出连续子数组(长度大于0)的最小公倍数等于k的子数组的个数。
首先我们应该从数组的开头,定义两个循环,来判断符合条件的子数组,符合就加一
学习:最小公倍数的求法
两个数的最小公倍数算法核心:最小公倍数=两整数的乘积/最大公约数
所以要用辗转相除法求最大公约数
最大公约数:a!=0?gcd(a,b%a):a
最小公倍数:a*b/gcd(a,b)
class Solution{
public int subarrayLCM(int[] nums,int k){
int ans = 0;
for(int i=0;i<nums.length;i++)
{
for(int j=i;j<nums.length;j++)
{
x=lcm(x,nums[j]);
if(x==k)
{
ans++;
}
else if(x>k)
break;
}
}
return ans;
}
public int gcd(int a,int b)
{
return a!=0?gcd(a,b%a):b
}
public int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
}