class="markdown_views prism-atom-one-light">
Description
给出一个长度为
k的序列
A1,...,Ak,定义
f(m)为满足以下条件的
C序列的数量:
1.若
Ai=−1则
Ci可以取
[0,m)中任意整数,否则
Ci=Ai%m
2.同余方程
i=1∑kCixi≡1(mod m)有解
给出一整数
n,求
m=1∑nf(m)
Input
第一行一整数
T表示用例组数,每组用例首先输入两个整数
k,n,之后输入一长度为
k的序列
Ai
(1≤T≤250,1≤k≤50,1≤n≤109,−1≤Ai≤109)
Output
输出答案,结果模
109+7
Sample Input
2
5 10
-1 -1 8 -1 -1
3 20
-1 6 18
Sample Output
Case #1: 24354
Case #2: 140
Solution
方程有解当且仅当
gcd(C,m)=1,假设
A序列中已经确定值的
gcd为
g,尚未确定的数字有
x个
1.若
g̸=0,记
f(d)为使得
gcd(C,m)=d的序列
C的个数,
F(d)为使得
d∣gcd(C,m)的序列
C的个数,则显然有
F(d)=(dm)x
且由
F(d)=d∣i∑f(i),莫比乌斯反演有
f(1)=d∣gcd(g,m)∑μ(d)F(d)=d∣gcd(g,m)∑μ(d)(dm)x
进而有
ans=m=1∑nd∣gcd(g,m)∑μ(d)(dm)x=d∣g∑μ(d)i=1∑⌊dn⌋ix=d∣g∑μ(d)S(⌊dn⌋,x)
其中
S(n,k)=i=1∑ik,通过伯努利序列即可
O(k2)预处理
O(k)得到
S(n,k),那么该种情况即可
O(xg)解决
2.若
g=0,将之前的式子稍作修改有
ans=m=1∑nd∣m∑μ(d)(dm)