CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
正题
题目链接:https://www.luogu.com.cn/problem/CF585E
题目大意
给出一个大小为\(n\)的可重集\(T\),求有多少个它的非空子集\(S\)和元素\(x\)满足
\(x\notin S,gcd\{S\}>1,gcd(S,x)=1\)
\(1\leq n\leq 5\times 10^5\),值域范围是\([2,10^7]\)
解题思路
\(x\notin S\)这个条件是没有用的,可以去掉
然后设\(f_i\)表示与\(i\)互质的数的个数,\(s_i\)表示\(gcd\)为\(i\)的集合个数,那么答案就是\(\sum f_is_i\)
然后设\(c_i\)表示\(i\)的个数
\]
然后可以处理出一个\(g_d=\sum_{d|j}c_j\)就可以了。
然后考虑\(s_i\)怎么处理
\]
就好了。
然后这些都可以用狄利克雷前缀/后缀和\(O(n\log \log n)\)求
code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e7+1,P=1e9+7;
int n,cnt,pri[N],mu[N],f[N],s[N],pw[N],ans;
bool v[N];
int main()
{
mu[1]=1;
for(int i=2;i<N;i++){
if(!v[i])pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<N;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0)break;
mu[i*pri[j]]=-mu[i];
}
}
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
f[x]++;;
}
pw[0]=1;
for(int i=1;i<N;i++)pw[i]=pw[i-1]*2ll%P;
for(int j=1;j<=cnt;j++)
for(int i=N/pri[j];i>=1;i--)
f[i]+=f[i*pri[j]];
for(int i=1;i<N;i++)s[i]=pw[f[i]]-1;
for(int i=1;i<N;i++)f[i]=f[i]*mu[i];
for(int j=cnt;j>=1;j--)
for(int i=1;i*pri[j]<N;i++)
f[i*pri[j]]+=f[i];
for(int j=cnt;j>=1;j--)
for(int i=1;i*pri[j]<N;i++)
(s[i]-=s[i*pri[j]])%=P;
for(int i=2;i<N;i++)
(ans+=1ll*f[i]*s[i]%P)%=P;
printf("%d\n",(ans+P)%P);
return 0;
}
CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】的更多相关文章
- 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\). ...
- 【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】585 E. Present for Vitalik the Philatelist
[题目]E. Present for Vitalik the Philatelist [题意]给定n个数字,定义一种合法方案为选择一个数字Aa,选择另外一些数字Abi,令g=gcd(Ab1...Abx ...
- CF 585 E Present for Vitalik the Philatelist
CF 585 E Present for Vitalik the Philatelist 我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ ...
- 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛
ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...
- CF585E:Present for Vitalik the Philatelist
n<=500000个2<=Ai<=1e7的数,求这样选数的方案数:先从其中挑出一个gcd不为1的集合,然后再选一个不属于该集合,且与该集合内任意一个数互质的数. 好的统计题. 其实就 ...
- 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\)是数组中和 ...
- Codeforces 585E. Present for Vitalik the Philatelist(容斥)
好题!学习了好多 写法①: 先求出gcd不为1的集合的数量,显然我们可以从大到小枚举计算每种gcd的方案(其实也是容斥),或者可以直接枚举gcd然后容斥(比如最大值是6就用2^cnt[2]-1+3^c ...
随机推荐
- docker 安装部署 redis(配置文件启动)
获取 redis 镜像 docker pull redis:4.0.12 docker images 创建容器 创建宿主机 redis 容器的数据和配置文件目录 # 创建宿主机 redis 容器的数据 ...
- 基于typescript编写vue的ts文件语法模板
1 <template> 2 <div> 3 <input v-model="msg"> 4 <p>prop: {{ propMes ...
- WPF 自己做一个颜色选择器
程序开发过程中,经常会遇到需要支持动态配置主题颜色的问题,通常,一个程序会有多种不同的颜色风格主题供选 有时候,更细致一些的地方,会需要支持自己配置颜色,这样我们就需要一个颜色选择器啦,下面是我自己开 ...
- ArcGIS地形分析--TIN及DEM的生成,TIN的显示
DEM是对地形地貌的一种离散的数字表达,是对地面特性进行空间描述的一种数字方法.途径,它的应用可遍及整个地学领域.通过对本次实习的学习,我们应加深对TIN建立过程的原理.方法的认识:熟练掌握ArcGI ...
- Fllink学习
1.Apache Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能. 现有的开源计算方案,会把流处理和批处 ...
- Playwright-python 教程
安装 pip install playwright -i https://mirrors.aliyun.com/pypi/simple/ 使用阿里源,下载速度快一点. python -m playwr ...
- ES6基础之let、const
es6的块级作用域通俗的讲就是一对花括号中的区域(声明对象的花括号不是块级作用域),块级作用域可以嵌套. let: 1.le声明的变量只在当前(块级)作用域内有效. 2.let声明的变量不能被重复声明 ...
- JavaScript 特殊字符
代码输出\'单引号\"双引号\&和号\\反斜杠\n换行符\r回车符\t制表符\b退格符\f换页符
- 七、Abp vNext 基础篇丨文章聚合功能下
介绍 不好意思这篇文章应该早点更新的,这几天在忙CICD的东西没顾得上,等后面整好了CICD我也发2篇文章讲讲,咱们进入正题,这一章来补全剩下的 2个接口和将文章聚合进行完善. 开工 上一章大部分业务 ...
- (六)羽夏看C语言——函数
写在前面 由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...