蓝桥杯2022年第十三届决赛真题-近似 GCD(C/C++组)

小蓝有一个长度为 n 的数组 A = (a1 a2 · · · an),数组的子数组被定义为从原数组中选出连续的一个或多个元素组成的数组。数组的最大公约数指的是数组中所有元素的最大公约数。如果最多更改数组中的一个元素之后,数组的最大公约数为 g,那么称 g 为这个数组的近似 GCD。一个数组的近似 GCD 可能有多种取值。

2. 在修改这个子数组中的一个元素之后(可以改成想要的任何值),子数组的最大公约数为 g,那么说明 g 是这个子数组的近似 GCD。

小蓝想知道,数组 A 有多少个长度大于等于 2 的子数组满足近似 GCD 的值为 g。

输入的第一行包含两个整数 n g,用一个空格分隔,分别表示数组 A 的长度和 g 的值。