小 L 与 GCD
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给定一个正整数序列 . 定义子序列为该序列按序保留若干项(非空) 后构成的序列,例如对于序列 等都是其子序列。

定义一个子序列的权值为序列内所有数的最大公因数,请求出权值前 k 大的子序列(若权值相同,按选取下标的字典序从小到大排列)。特别地,由于输出量可能过大, 你只需要输出这这些子序列中每个子序列选取下标乘积的和即可。对 取模。

输入描述:

第一行两个数 .

接下来一行 n 个数,第 i 个数为数列 .

输出描述:

输出一个数,表示 GCD 前 k 大的子序列选取下标乘积的和。若不存在前 k 大的子序列,输出 -1.
示例1

输入

复制
20 10000
18 12 16 20 8 20 2 12 20 2 14 20 14 16 12 8 20 16 14 20

输出

复制
2840199644