我们考虑枚举每一条直线,一条线可以用两个点来表示。假设我们定一个向量
x=(x1,x2,x3……,xn) ,那么第一个点可以取
∏i=1n(mi−xi) 种,令
d=gcd(x1,x2……) ,那么这条线上只有
d 个整点。可以得式子:
t1=1∑m1t2=1∑m2……tn∑mn(c−2d−1)i=1∏n(mi−ti)
然后就是推了。
t1=1∑m1t2=1∑m2……tn∑mn(c−2d−1)i=1∏n(mi−ti)=d=1∑min(m1,m2……)t1=1∑m1t2=1∑m2……tn∑mn(c−2d−1)[gcd(t1,t2……)=d]i=1∏n(mi−ti)=d=1∑min(m1,m2……)(c−2d−1)t1=1∑m1t2=1∑m2……tn∑mn[gcd(t1,t2……)=d]i=1∏n(mi−ti)=d=1∑min(m1,m2……)(c−2d−1)t1=1∑⌊dm1⌋t2=1∑⌊dm2⌋……tn∑⌊dmn⌋[gcd(t1,t2……)=1]i=1∏n(mi−dti)
莫反得
[gcd(t1,t2……)=1]=∑k∣t1,k∣t2……k∣tnμ(k) 。
=d=1∑min(m1,m2……)(c−2d−1)t1=1∑⌊dm1⌋t2=1∑⌊dm2⌋……tn∑⌊dmn⌋k∣t1,k∣t2……k∣tn∑μ(k)i=1∏n(mi−dti)=d=1∑min(m1,m2……)(c−2d−1)k=1∑μ(k)t1=1∑⌊dkm1⌋t2=1∑⌊dkm2⌋……tn∑⌊dkmn⌋i=1∏n(mi−dkti)=T=1∑d∣T∑(c−2d−1)μ(dT)t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……tn∑⌊Tmn⌋i=1∏n(mi−Tti)
记
f(T,c)=∑d∣T(c−2d−1)μ(dT),g(n,T)=∑t1=1⌊Tm1⌋∑t2=1⌊Tm2⌋……∑tn⌊Tmn⌋∏i=1n(mi−Tti)
=T=1∑f(T,c)g(n,T)
f(T,c) 是好算的,我们重点看
g(n,T)
g(n,T)=t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……tn∑⌊Tmn⌋i=1∏n(mi−Tti)=t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……tn∑⌊Tmn⌋(m1−Tt1)(m2−Tt2)……(mn−Ttn)=t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……(m1−Tt1)(m2−Tt2)……tn∑⌊Tmn⌋(mn−Ttn)
∑tn⌊Tmn⌋(mn−Ttn) 不就是一个等差数列求和吗?
=t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……(m1−Tt1)(m2−Tt2)……(⌊Tmn⌋mi−2T(⌊Tmn⌋+1)⌊Tmn⌋)=(⌊Tmn⌋mi−2T(⌊Tmn⌋+1)⌊Tmn⌋)t1=1∑⌊Tm1⌋t2=1∑⌊Tm2⌋……(m1−Tt1)(m2−Tt2)……=(⌊Tmn⌋mi−2T(⌊Tmn⌋+1)⌊Tmn⌋)g(n−1,T)=i=1∏n(⌊Tmn⌋mi−2(T⌊Tmi⌋+1)⌊Tmi⌋)
这是不是可以看作一个
T 的且系数只和
⌊Tmi⌋,mi 有关的多项式,令
xhi 代表多项式的系数。
=i=0∑xhiTi
带回原式。
=T=1∑f(T,c)i=0∑xhiTi=i=0∑xhiT=1∑f(T,c)Ti
因为系数只和
⌊Tmi⌋,mi 有关,所以一个整除分块来对系数预处理即可。
完结撒花\o/