「CF585E」 Present for Vitalik the Philatelist

传送门

我们可以考虑枚举 \(S'=S\cup\{x\}\),那么显然有 \(\gcd\{S'\}=1\)。

那么我们从里面可以选一个数出来作为 \(x\),共有 \(|S'|\) 种可能,我们记为 \((x,S)\)。

但是这样显然会计算到一些不合法的情况,考虑统计。

对于一个集合 \(S\),若其 \(\gcd\) 为 \(1\),则再任意添加一个数 \(\gcd\) 仍为 \(1\),这样的二元组显然是不合法的,共有 \(n-|S|\) 种可能。

所以对于一个 \(\gcd\) 为 \(1\) 的集合 \(S\),其对答案的贡献就是 \(|S|-(n-|S|)=2|S|-n\)。

设给出的数的集合为 \(U\),故答案可表示为

\[\sum_{S\subseteq U,S\neq \varnothing}[\gcd \{S\}=1](2|S|-n)
\]

显然可以考虑莫比乌斯反演,于是有

\[\sum_{d}\mu(d)\sum_{S\subseteq U\cap\{x|x=kd,k\in \mathbb{Z}\},S\neq \varnothing}(2|S|-n)
\]

令 \(T=U\cap\{x|x=kd,k\in \mathbb{Z}\}\),我们的问题就变为了计算

\[\sum_{S\subseteq T,S\neq \varnothing}(2|S|-n)
\]

首先这个不等于空集很烦,我们可以把它加上最后再减去,变为

\[n+2\sum_{S\subseteq T}|S|-\sum_{S\subseteq T}n
\]

后面那部分很好算,共有 \(2^{|T|}\) 种集合,答案即为 \(2^{|T|}n\)。

前一部分可以考虑计算每个数对答案的贡献,枚举选某个数(共 \(|T|\) 种可能),剩下的 \(|T|-1\) 个元素都是选或不选,故答案为 \(2(2^{|T|-1}|T|)=2^{|T|}|T|\)。

然后问题就变成了如何求 \(T\)。

这个东西可以直接分解质因数,也可以用 \(\text{Dirichlet}\) 后缀和,在此不再赘述。

总复杂度大概是 \(O(V\log_2\log_2V+n)\) 的,其中 \(V\) 表示值域。

贴代码

/*---Author:HenryHuang---*/
/*---Never Settle---*/
/*---Never Enough---*/
#include<bits/stdc++.h>
#define module(x) ((x)>=p?((x)-p):(x))
using namespace std;
const int maxn=1e7+5;
const int p=1e9+7;
int pri[maxn],pp[maxn],mu[maxn],cnt;
int p2[maxn];
int sum[maxn];
void init(int mx){
mu[1]=1;
for(int i=2;i<=mx;++i){
if(!pp[i]) pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<=mx;++j){
pp[i*pri[j]]=1;
if(i%pri[j]==0){
mu[i*pri[j]]=0;
break;
}
else mu[i*pri[j]]=-mu[i];
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;cin>>n;
p2[0]=1;
int mx=0;
for(int i=1;i<=n;++i){
int x;cin>>x;mx=max(mx,x);
++sum[x];
p2[i]=module(p2[i-1]<<1);
}
init(mx);
for(int i=1;i<=cnt;++i)
for(int j=mx/pri[i];j;--j)
sum[j]+=sum[j*pri[i]];
int ans=0;
for(int i=1;i<=mx;++i){
if(mu[i]){
int tmp=1ll*(1ll*p2[sum[i]]*(sum[i]-n+p)+n)%p;
if(mu[i]>0) ans=module(ans+tmp);
else ans=module(ans-tmp+p);
}
}
cout<<module(ans+p)<<'\n';
return 0;
}

「CF585E」 Present for Vitalik the Philatelist的更多相关文章

  1. CF585E:Present for Vitalik the Philatelist

    n<=500000个2<=Ai<=1e7的数,求这样选数的方案数:先从其中挑出一个gcd不为1的集合,然后再选一个不属于该集合,且与该集合内任意一个数互质的数. 好的统计题. 其实就 ...

  2. 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\) ...

  3. 【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 ...

  4. 【CodeForces】585 E. Present for Vitalik the Philatelist

    [题目]E. Present for Vitalik the Philatelist [题意]给定n个数字,定义一种合法方案为选择一个数字Aa,选择另外一些数字Abi,令g=gcd(Ab1...Abx ...

  5. CF 585 E Present for Vitalik the Philatelist

    CF 585 E Present for Vitalik the Philatelist 我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ ...

  6. Codeforces 585E. Present for Vitalik the Philatelist(容斥)

    好题!学习了好多 写法①: 先求出gcd不为1的集合的数量,显然我们可以从大到小枚举计算每种gcd的方案(其实也是容斥),或者可以直接枚举gcd然后容斥(比如最大值是6就用2^cnt[2]-1+3^c ...

  7. E. Present for Vitalik the Philatelist 反演+容斥

    题意:给n个数\(a_i\),求选一个数x和一个集合S不重合,gcd(S)!=1,gcd(S,x)==1的方案数. 题解:\(ans=\sum_{i=2}^nf_ig_i\),\(f_i\)是数组中和 ...

  8. Codeforces 585E - Present for Vitalik the Philatelist(简单莫反+狄利克雷前缀和)

    Codeforces 题目传送门 & 洛谷题目传送门 一道不算太难的 D1E 罢--虽然我不会做/kk u1s1 似乎这场 Div1 挺水的?F 就是个 AC 自动机板子还被评到了 3k2-- ...

  9. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

随机推荐

  1. 面试侃集合 | SynchronousQueue公平模式篇

    面试官:呦,小伙子来的挺早啊! Hydra:那是,不能让您等太久了啊(别废话了快开始吧,还赶着去下一场呢). 面试官:前面两轮表现还不错,那我们今天继续说说队列中的SynchronousQueue吧. ...

  2. OpenResty搭建高性能服务端

    OpenResty搭建高性能服务端   Socket编程 Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select.poll.epoll是Linux API提 ...

  3. 人工智能训练云燧T10

    人工智能训练云燧T10 基于邃思芯片打造的面向云端数据中心的人工智能训练加速产品,具有高性能.通用性强.生态开放等优势,可广泛应用于互联网.金融.教育.医疗.工业及政务等人工智能训练场景. 超强算力 ...

  4. SLAM相机定位

    SLAM相机定位 摘要 深度学习在相机定位方面取得了很好的结果,但是当前的单幅图像定位技术通常会缺乏鲁棒性,从而导致较大的离群值.在某种程度上,这已通过序列的(多图像)或几何约束方法解决,这些方法可以 ...

  5. Appium_Android自动化测试Genymotion之模拟器联网设置

    目的: 使用Genymotion做Android项目,需要考虑到联网,以下是设置操作 操作步骤: 打开VM VirtualBox,设置->网络-> 启动模拟器,设置  备注: 模拟器的手机 ...

  6. CSS基础知识及其基本语法

    一.什么是CSS CSS 是层叠样式表( Cascading Style Sheets ) 的简称. 有时我们也会称之为CSS 样式表或级联样式表. CSS 也是一种标记语言 CSS 主要用于设置HT ...

  7. 停车场事故频频,AI 达人将摄像头变身安全卫士

    2021 年 2 月,"新内容 新交互" 全球视频云创新挑战赛启幕.本次大赛由英特尔联合阿里云主办,与优酷战略技术合作,天池平台和阿里云视频云团队共同承办.大赛自开赛以来,吸引了全 ...

  8. IntelliJ IDEA不好用?那是因为没掌握这些技巧

    想要愉快的coding,一个好的IDE肯定少不了.而对于Java开发者来说,IntelliJ IDEA绝对是Java-IDE的首屈一指的选择(eclipse党还请绕我一命). 从我第一次下载IDEA到 ...

  9. 「模拟8.19 A嚎叫..(set) B主仆..(DFS) C征程..(DP+堆优化)」

    为啥这一套题目背景感到很熟悉. T1  嚎叫响彻在贪婪的厂房 考试一个小时没调出来,自闭了.......... 正解很好想,最后实在打不出来了只好暴力骗分了... 联想到以前做的题:序列(涉及质因数分 ...

  10. 【dog与lxy】8.25题解-necklace

    necklace 题目描述 可怜的dog最终还是难逃厄运,被迫于lxy签下城下之约.这时候lxy开始刁难dog. Lxy首先向dog炫耀起了自己的财富,他拿出了一段很长的项链.这个项链由n个珠子按顺序 ...