Remember The Feeling 2017-09-27 21:15

反应过来莫比乌斯反演是啥意思

HDU 6053 - TrickGCD [ 莫比乌斯函数,筛法分块 ]  | 2017 Multi-University Training Contest 2
题意:
    给出数列 A[N],问满足:
        1 <= B[i] <= A[i] ;
        对任意(l, r) (1<=l<=r<=n) ,使得 gcd(bl,...br) >= 2 ;
    的 B[N] 数列的个数
分析:
    设 gcd(b1,...bn) = k (k >= 2),此时 k 对答案的贡献为 (a1/k)*(a2/k)*(a3/k)*...*(an/k)
    根据容斥原理,ans = +[k=一个素数之积 时对答案的贡献]
                        -[k=两个素数之积 时对答案的贡献]
                        +[k=三个素数之积 时对答案的贡献]
                        ...
    故任意k对答案的贡献系数 μ(k) = 0 , k是完全平方数的倍数
                                 = (-1)^(n-1) , k = p1*p2*p3*...*pn ,p是素数
    贡献系数可以O(nsqrt(n)) 或者 O(nlogn) 预处理,再或者可以看出μ(k) 是莫比乌斯函数的相反数
     
    现在枚举k需要O(n)的时间,计算k对答案的贡献必须在O(sqrt(n))的时间之内
    将a[]处理成权值数组,并求前缀和,设为 sum[]
    对于每个k,对sum[]进行埃式筛法的分块,即根据k的倍数分块
    此时每个k的贡献 = 1^(sum[2k-1]-sum[k-1]) * 2^(sum[3k-1]-sum[2k-1]) * 3^(sum[4k-1]-sum[3k-1]) ...
    就做到 O(n(logn)^2)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值