1. 程式人生 > >[莫比烏斯反演] HDU6053: [2017 多校-第2場] TrickGCD

[莫比烏斯反演] HDU6053: [2017 多校-第2場] TrickGCD

題意

給出一個長度為n的數列A,求有多少個不同的長度為n的B數列滿足下列限制:
1BiAi
Foreachpair(L,R)(1LRn),gcd(BL,BL+1,...,BR)2
n,ai100000
有T組資料,T10

題解

第一次打 HDU 多校,全場抱大腿,都靠兩位學長……
先轉換一下,題目說的第二個條件顯然就等價於 gcd(B1,...,Bn)>=2.
然後可以容斥一下,就求滿足 gcd(B1,...,Bn)=1 的方案數即可。
開始推式子:

i1=1a1i2=1a2...in=1an[gcd(i1,...,in)=1]
i1=1a1i2
=1
a2
...in=1and|gcd(..)μ(k)

d=1min(a)d|i1a1d|i2a2...d|inanμ(d)
d=1min(a)μ(d)i=1naid
然後如果按照傳統方法列舉除法分塊搞, ni=1aidnn 段。這樣是 O(n2nT) 的,會 T 掉。
怎麼做呢?可以換個思路,對於每次算 ,我們列舉 aid 的值,然後統計每個值有幾個,快速冪即可。
具體來說:
d=1min(a)μ(d)t=1max(a)/dtx,(