融合
题号:NC218955
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

zb手上有n张卡片构成的牌组a,其中第i张卡牌的消费为ai。

当前回合有x费用,回合分为两个阶段。

融合阶段:选择一张卡作为融合卡,再选若干张卡甚至零张为融合素材卡。融合发动时,融合素材卡消失,融合卡的消费变为融合卡与其融合素材卡的GCD(最大公约数)。

出卡阶段:将一张消费不超过x的卡打出,花费其卡的消费,回合结束;或者不出卡,即消费为零,回合结束。若不存在小于等于x的卡,则直接回合结束。

注意:只能进行一次融合。只能出一张卡或不出卡。

zb想知道他这回合能做出多少种不同的消费动作。

输入描述:

第一行输入n,x。

第二行输入n个ai。
1<=n<=1e3, 1<=ai,x<=1e9。

输出描述:

一个T,表示多少种费用不同的动作。
示例1

输入

复制
2 7
7 8

输出

复制
3

说明

可以将a=[7 8],选择7为融合卡,8为融合素材卡。

融合为a=[1],不出卡,消费为0,或打出消费为1的卡。

可以将a=[7,8]。选择7或8为融合卡,选择零张融合素材卡。

融合为a=[7,8],打出消费为7的卡。

则消费不同的动作有3种,分别为0 1 7。

示例2

输入

复制
3 2
4 8 8

输出

复制
1
示例3

输入

复制
3 6
4 6 7

输出

复制
5