时间限制: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