找出所有是k的倍数的数,假设总共x个。那么算下他们的子集个数2x−1
这就是答案了?并不是! 这不是"gcd恰好等于k" 的子集个数,而是"gcd是k的倍数"的子集个数。观察他们的关系,我们可以发现:
"gcd是k的倍数"的子集个数 = "gcd恰好是k"的子集个数 + "gcd恰好是2k"的子集个数 + .. + "gcd恰好是ck"的子集个数
小红是一个喜欢数学和游戏的年轻人。有一天,他发明了一个新的游戏,可以考验人们的智力和数学知识。
这个游戏的规则很简单:给定一个长度为n的整数序列a和一个正整数k,玩家需要从序列a中删掉一些数,使得剩下的数的最大公约数等于k。例如,如果序列a为[2,4,6,8],k=2,则玩家可以删掉4和8,剩下的数为[2,6],它们的最大公约数是2。
小红希望这个游戏能够受到更多人的欢迎,因此他决定把这个游戏发布在他的网站上,并邀请人们来挑战。他相信,这个游戏不仅可以锻炼人们的数学能力,还能帮助人们更好地理解最大公约数的概念。
现在小红想你问有多少种删除的方案。如果答案太大,就把它对 109+7 取模。
最大公约数:指两个或多个整数公有约数中最大的一个。
第一行输入两个正整数 n,k
第二行输入 n 个正整数代表 a1,a2,...,an
1⩽n,ai⩽105
输出一行整数,代表删除的方案数在109+7 意义下的取值。
输入
5 5
1 5 2 3 5
输出
3