CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
正题
题目链接:https://www.luogu.com.cn/problem/CF585E
题目大意
给出一个大小为nnn的可重集TTT,求有多少个它的非空子集SSS和元素xxx满足
x∉S,gcd{S}>1,gcd(S,x)=1x\notin S,gcd\{S\}>1,gcd(S,x)=1x∈/S,gcd{S}>1,gcd(S,x)=1
1≤n≤5×1051\leq n\leq 5\times 10^51≤n≤5×105,值域范围是[2,107][2,10^7][2,107]
解题思路
x∉Sx\notin Sx∈/S这个条件是没有用的,可以去掉
然后设fif_ifi表示与iii互质的数的个数,sis_isi表示gcdgcdgcd为iii的集合个数,那么答案就是∑fisi\sum f_is_i∑fisi
然后设cic_ici表示iii的个数
fi=∑d∣inμ(d)∑d∣jcjf_i=\sum_{d|i}^n\mu(d)\sum_{d|j}c_jfi=d∣i∑nμ(d)d∣j∑cj
然后可以处理出一个gd=∑d∣jcjg_d=\sum_{d|j}c_jgd=∑d∣jcj就可以了。
然后考虑sis_isi怎么处理
si=2ci−1−∑i∣d(2cd−1)s_i=2^{c_i}-1-\sum_{i|d}(2^{c_d}-1)si=2ci−1−i∣d∑(2cd−1)
就好了。
然后这些都可以用狄利克雷前缀/后缀和O(nloglogn)O(n\log \log n)O(nloglogn)求
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【莫比乌斯反演,狄利克雷前缀和】相关推荐
- 莫比乌斯反演新手入门及练习题
参考了以下大佬写出来的详细博客. 莫比乌斯反演入门讲解_tomandjake_的博客-CSDN博客_莫比乌斯反演 狄利克雷卷积与莫比乌斯函数_RBS的专栏-CSDN博客 在自己学习莫比乌斯反演时,自己 ...
- 【Project Euler】530 GCD of Divisors 莫比乌斯反演
[题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...
- 狄利克雷卷积莫比乌斯反演证明
狄利克雷卷积简介 卷积这名字听起来挺学究的,今天学了之后发现其实挺朴实hhh. 卷积: "(n)"表示到n的一个范围. 设\(f,g\)是两个数论函数(也就是说,以自然数集为定义域 ...
- 2021牛客暑期多校训练营(二) J. Product of GCDs 不动脑子的莫比乌斯反演做法(
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/11253/J ...
- P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4619 [SDOI2018]旧试题(莫比乌斯反演,三元环计数) Problem 计算: ∑i=1A ...
- P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值) Problem Sol ...
- 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...
- (每日一题)P3312 [SDOI2014]数表(经典莫比乌斯反演 + 树状数组维护离线询问)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反 P3312 [SDOI2 ...
- SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...
最新文章
- Oracle:彻底结束会话 ,彻底解锁
- 为什么特斯拉不使用激光雷达
- 【BZOJ3555】[Ctsc2014]企鹅QQ hash
- 论文翻译_做论文翻译需要知道哪些翻译技巧?知行翻译:这3个技巧
- 计算机硬件与游戏发展史,电脑硬件的发展历程中 什么是电竞SSD?
- 先序序列为a、b、c、d的不同二叉树的个数是多少(卡特兰数)
- eclipse查看git地址_Git大文件管理:函数计算和OSS支持的Git LFS服务器
- linux gitlab 9 邮件不发送,gitlab无法发送邮件
- Python中下划线---完全解读
- ops中set_sysclk set_clkdiv set_pll详解
- websphere、weblogic上JConsole的配置
- 汇编语言语句及其格式
- 项目实用-不登录就无法访问主页
- MySQL可视化工具之SQLyog小海豚
- allegro 丝印 对齐_如何对齐丝印 - Cadence allegro PCB 教程
- 【解决】Git:hint:Pulling without specifying how to reconclie divergent branches is...
- Java实现日历小程序【代码】
- Matter(CHIP) 目录和平台相关的文件
- 医院选址c语言课程设计,通信学院2012届本科毕业设计选题结果(学生)2.xls
- 集体名词做主语时下谓语的单复数选择
热门文章
- mysql数据恢复时显示多线程恢复_MySQL多线程备份恢复工具mydumper,myloder
- java中JOptionPane类_java:JOptionPane类消息框总结
- 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
- linux下安装服务,linux下的软件服务安装管理
- java hdms_字段为clob类型,无法插入数据
- java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...
- git revert 后再次merge_git如何回滚错误合并的分支
- session.setAttribute和request.setAttribute的区别
- android 背景图片居中显示文字,Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。...
- 计算机操作系统第四章作业