质因数分解复习
public class AC003 {
//前置知识 : 一堆数组相乘,末尾0的个数 = min(cnt2,cnt5)
//删除一个区间 那么这个区间满足的条件是 2和 5的个数 小于某个值
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] nums = new int[n];
int[] num2 = new int[n];
int[] num5 = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
while (nums[i] % 2 == 0){
nums[i] = nums[i] / 2;
num2[i]++;
}
while (nums[i] % 5 == 0){
nums[i] = nums[i] / 5;
num5[i]++;
}
}
int cnt2 = Arrays.stream(num2).sum();
int cnt5 = Arrays.stream(num5).sum();
int l = 0;
int res = 0;
//r 右移扩大区间
for (int r = 0; r < n; r++) {
cnt2 -= num2[r];
cnt5 -= num5[r];
//不满足条件时 l右移 给r创造右移的条件
while (l <= r && k> Math.min(cnt2,cnt5)){
cnt2 += num2[l];
cnt5 += num5[l];
l++;
}
res += r - l - 1;
}
System.out.println(res);
}
}