码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 803F(容斥原理)

时间:2017-05-17 10:15:41      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:正整数   表示   sigma   strong   答案   整数   容斥   分析   force   

题意:

给n个正整数,求有多少个GCD为1的子序列。答案对1e9+7取模。

1<=n<=1e5,数字ai满足1<=ai<=1e5

分析:

设f(x)表示以x为公约数的子序列个数

那么ans=f(1)- Σf(pi) + Σf(pi*pj) - Σf(pi*pj*pk) ........

注意到对于一个f(x),它对结果的贡献是:

  若x为合数,那么前面系数为0

  若x由奇数个素数组成,那么系数是-1

  若x由偶数个素数组成,那么系数是1

这明显就是莫比乌斯函数……直接一个线性筛出来

那么问题就是f(x)怎么求,这显然就是f(x)=2^num(x) - 1 (num(x)表示原先序列里有多少个数是x的倍数)

Codeforces 803F(容斥原理)

标签:正整数   表示   sigma   strong   答案   整数   容斥   分析   force   

原文地址:http://www.cnblogs.com/wmrv587/p/6865760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!