【CodeForces】585 E. Present for Vitalik the Philatelist
【题目】E. Present for Vitalik the Philatelist
【题意】给定n个数字,定义一种合法方案为选择一个数字Aa,选择另外一些数字Abi,令g=gcd(Ab1...Abx),要求满足g≠1且gcd(Aa,g)=1,求方案数取模1e9+7。2<=n<=5*10^5,2<=ai<=10^7。
【算法】数论,计数问题
【题解】
考虑选择一些数字使得g≠1,容易想到枚举g值,O(n ln n)地枚举g的倍数,得到b[g]表示数列中数字为g的倍数的个数。
那么含有公因数g的区间数为2^b[g]-1,考虑容斥。
引入莫比乌斯函数μ(x),简单定义:μ(1)=1,含奇数个素因子μ(x)=-1,含偶数个素因子μ(x)=1,含重复素因子μ(x)=0。
根据容斥原理的奇加偶减,应将-μ[g]作为系数,那么总方案数就是sum=Σ-μ(g)*(2^b[g]-1),g=2~max(ai)。
接下来考虑区间和数字Aa组合,会减去gcd和Aa不互质的区间,也就是去掉公因数含有Aa的素因子的区间,这实际上也是莫比乌斯函数容斥。
所以可以套用在原来的容斥上,也就是对于数字Aa,只要将Aa的所有因子g的μ(g)视为0,计算出来的sum就是数字Aa的贡献。
那么再换个角度,含有公因数g的区间只会在数字Aa不含因子g的时候被贡献,这样的数字数实际上是n-b[g]。
所以,ans=Σ-μ(g)*(2^b[g]-1)*(n-b[g]),g=2~max(ai)。
最后,可以用自带容斥的方法避开μ的计算。最后视为对(2^b[g]-1)*(n-b[g])进行容斥(即使这样容斥没有实际含义),然后减去f[h](h=k*g),得到f[g]。ans=Σf[g]。(这种方法和埃式筛μ的本质相同)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,N=,M=1e9+;
int n,x,b[N],fx[maxn],f[N],ans=,mx=;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&x),mx=max(mx,x),b[x]++;
fx[]=;for(int i=;i<=n;i++)fx[i]=(fx[i-]<<)%M;
for(int g=mx;g>=;g--){
x=b[g];
for(int i=g+g;i<=mx;i+=g){
x+=b[i];
f[g]=(f[g]-f[i]+M)%M;
}
if(g!=){
f[g]=(f[g]+1ll*(fx[x]-)*(n-x)%M)%M;
ans=(ans+f[g])%M;
}
}
printf("%d",ans);
return ;
}
【CodeForces】585 E. Present for Vitalik the Philatelist的更多相关文章
- CF 585 E Present for Vitalik the Philatelist
CF 585 E Present for Vitalik the Philatelist 我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ ...
- 【CF 585E】 E. Present for Vitalik the Philatelist
E. Present for Vitalik the Philatelist time limit per test 5 seconds memory limit per test 256 megab ...
- 【Codeforces】Round #491 (Div. 2) 总结
[Codeforces]Round #491 (Div. 2) 总结 这次尴尬了,D题fst,E没有做出来.... 不过还好,rating只掉了30,总体来说比较不稳,下次加油 A:If at fir ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- CF585E. Present for Vitalik the Philatelist [容斥原理 !]
CF585E. Present for Vitalik the Philatelist 题意:\(n \le 5*10^5\) 数列 \(2 \le a_i \le 10^7\),对于每个数\(a\) ...
- 「CF585E」 Present for Vitalik the Philatelist
「CF585E」 Present for Vitalik the Philatelist 传送门 我们可以考虑枚举 \(S'=S\cup\{x\}\),那么显然有 \(\gcd\{S'\}=1\). ...
- 【CodeForces】601 D. Acyclic Organic Compounds
[题目]D. Acyclic Organic Compounds [题意]给定一棵带点权树,每个点有一个字符,定义一个结点的字符串数为往下延伸能得到的不重复字符串数,求min(点权+字符串数),n&l ...
- 【Codeforces】849D. Rooter's Song
[算法]模拟 [题意]http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置.(还 ...
- 【CodeForces】983 E. NN country 树上倍增+二维数点
[题目]E. NN country [题意]给定n个点的树和m条链,q次询问一条链(a,b)最少被多少条给定的链覆盖.\(n,m,q \leq 2*10^5\). [算法]树上倍增+二维数点(树状数组 ...
随机推荐
- 栈和队列在python中的实现
栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...
- 蜗牛慢慢爬 LeetCode 2. Add Two Numbers [Difficulty: Medium]
题目 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...
- xpath的学习
xpath的作用就是两个字“定位”,运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 定位 1.依靠自己属性,文本定位 //td[ ...
- 【移动端debug-1】css3中box-shadow的溢出问题
今天做项目遇到一个box-shadow的溢出父容器的问题,如下面的代码中,子容器inner的box-shadow在没有任何设置的情况下是溢出父容器的. 代码: <!DOCTYPE html> ...
- UVA11625_Lines of Containers
题意很简单,给你一个n*m的矩阵,现在问你这个矩阵能否变为标准矩阵(即数字从小到大),如果能最少需要几步呢? 其实是个赤果果的水题.记得暑假安叔也出过一个类似的题目,那个好像是在codeforces上 ...
- BZOJ 4034 树上操作(树的欧拉序列+线段树)
刷个清新的数据结构题爽一爽? 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...
- 在Linux上编译使用tcmalloc
项目需要使用tcmalloc,比较简单的方法是安装tcmalloc相关包(gpertools)后,将tcmalloc的静态库提取出来,在编译项目内核(执行makefile)时,链接上静态库即可. 这里 ...
- The Necklace UVA - 10054(欧拉回路)
题目分析:1.无向图欧拉回路是否连通2.所有点的度为偶数.并查集+degree 这题题目保证了是联通的 所以就不用判断是否联通了 #include <iostream> #include ...
- 漫谈ElasticSearch关于ES性能调优几件必须知道的事
lasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊 ...
- 【BZOJ3243】【NOI2013】向量内积(矩阵,数论)
[BZOJ3243][NOI2013]向量内积(矩阵,数论) 题面 BZOJ 题解 这题好神仙. 首先\(60\)分直接是送的.加点随机之类的可以多得点分. 考虑正解. 我们先考虑一下暴力. 我们把\ ...