[Codeforces585E]Present for Vitalik the Philatelist(容斥原理+组合数学)
来源:互联网 发布:电台司令 评价 知乎 编辑:程序博客网 时间:2024/05/16 04:56
题目描述
传送门
题意:给出一列数,对于每一个数,求选出一个不包含当前数的非空子集满足子集与当前数gcd为1,并且子集中的所有数的gcd不为1的方案数,统计总和。
题解
首先考虑对于一个数,若它为质数,那么所有不是它倍数的数都和所有是它倍数的数互质
假设个数分别为x,y
那么它计算的答案应该为
但是如果对于质数p和质数q都这样计算的话,p和q的公倍数会被重复计算
那么就需要运用到容斥原理,也就是一个质数的乘积-两个质数+三个质数…
可以发现容斥系数就是莫比乌斯函数取反
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 10000000#define LL long long#define Mod 1000000007int n;int mi[500005],p[N+3],prime[7000000],mu[N+3],ans;LL f;void get(int n){ for (int i=2;i<=n;++i) { if (!p[i]) { prime[++prime[0]]=i; mu[i]=-1; } for (int j=1;j<=prime[0]&&i*prime[j]<=n;++j) { p[i*prime[j]]=1; if (i%prime[j]==0) { mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } }}int main(){ get(N); memset(p,0,sizeof(p)); scanf("%d",&n); mi[0]=1;for (int i=1;i<=n;++i) mi[i]=mi[i-1]*2%Mod; for (int i=1;i<=n;++i) { int x;scanf("%d",&x); ++p[x]; } for (int i=2;i<=N;++i) { if (!mu[i]) continue; f=0; for (int j=i;j<=N;j+=i) f+=p[j]; f=(LL)(n-f)*(mi[f]-1)%Mod; ans=(ans-mu[i]*f)%Mod; } ans=(ans%Mod+Mod)%Mod; printf("%d\n",ans);}
0 0
- [Codeforces585E]Present for Vitalik the Philatelist(容斥原理+组合数学)
- CodeForces 585D Present for Vitalik the Philatelist(容斥原理+gcd)
- codeforces 585E. Present for Vitalik the Philatelist (容斥原理)
- Codeforces 585E Present for Vitalik the Philatelist (莫比乌斯反演)
- 解题报告:Codeforces Round #325(Div. 1) E. Present for Vitalik the Philatelist (莫比乌斯反演)
- uva 10325 The Lottery(组合数学-容斥原理)
- 容斥原理(组合数学)总结
- UVa 11481 Arrange the Numbers (组合数学+容斥原理)
- UVA 10325 The Lottery (组合数学,容斥原理,二进制枚举)
- UVa 11806 - Cheerleaders (组合数学 容斥原理)
- HDU 5073 Coprime(容斥原理+组合数学)
- [BZOJ2839]集合计数(容斥原理+组合数学)
- [BZOJ3198][Sdoi2013]spring(hash+容斥原理+组合数学)
- [BZOJ4710][Jsoi2011]分特产(容斥原理+组合数学)
- [BZOJ2916][Poi1997]Monochromatic Triangles(容斥原理+组合数学)
- bzoj 4710(组合数学+容斥原理)
- [BZOJ4710][JSOI2011]分特产(组合数学+容斥原理)
- [BZOJ4487][JSOI2015]染色问题(组合数学+容斥原理)
- 设置聊天游戏服务器的思路
- Spring中JdbcTemplate的使用
- Material Design
- 多股票策略和双均线策略结合
- tomcat配置都没错,一启动就秒关闭,转载别人的,以后可以自己留着
- [Codeforces585E]Present for Vitalik the Philatelist(容斥原理+组合数学)
- TensorFlow入门 mint.py
- 腾讯2017年实习生招聘编程题——字符移位
- Linux下Redis快速安装
- 旋转数组中的最小数字
- 欧几里得算法与其扩展 Romantic
- TensorFlow架构与设计:会话生命周期
- RocketMQ与Kafka对比(18项差异)
- CODE[VS] 1474 十进制转m进制