CF 585 E Present for Vitalik the Philatelist

我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ 的集合的个数。

那么显然答案就是

\[\sum_{i > 1} f(i)s(i)
\]

所以我们现在考虑怎么求 $ f $ 和 $ s $ 。

先考虑 $ f $ ,

\[f(x) = \sum_{i} [gcd(i,x) = 1] c_i\\f(x) = \sum_{i} c_i \sum_{d|gcd(i,x)} \mu(d)\\f(x) = \sum_{d | x} \mu(d) \sum_{d|i} c_i
\]

我们设 $ t(x) = \sum_{x|i} c_i $ ,不难发现这就是我的 这篇博客 里面的第二种卷积,可以筛出来。

那么

\[f(x) = \sum_{d|x} \mu(d) t(d)
\]

然后又可以用第一种卷积来做,于是我们就跑出了 $ f $ 。

现在考虑怎么求 $ s $ ,我们可以假设 $ s'(x) $ 就是 gcd 为 $ x $ 的倍数的所有集合的个数。我们需要算出 $ x $ 的倍数的数字个数,就是 $ \sum_{x|i} c_i $ ,这个不就是前面的 $ t(x) $ 吗!

所以显然有

\[s'(x) = 2^{t(x)} - 1
\]

同时我们知道

\[s'(x) = \sum_{x|d} s(d)
\]

这个东西就是第二个卷积的反过来的形式,也就是第四种卷积!

所以我们可以三次 $ O(w\log\log w) $ 跑过去啦。

开始看错 $ w $ 大小了。。MLE了两发。。

#include "iostream"
#include "algorithm"
#include "cstring"
#include "cstdio"
#include "queue"
using namespace std;
#define MAXN 10000006
#define P 1000000007
int n;
int A[500006] , c[MAXN] , _[500006] , mu[MAXN] , s[MAXN];
int pri[MAXN] , en , lim;
void sieve( int x ) {
pri[0] = 1; mu[1] = 1;
for( int i = 2 ; i <= x ; ++ i ) {
if( !pri[i] ) pri[++ en] = i , mu[i] = -1;
for( int j = 1 ; i * pri[j] <= x && j <= en ; ++ j ) {
pri[i * pri[j]] = 1;
if( i % pri[j] == 0 ) { mu[i * pri[j]] = 0; break; }
mu[i * pri[j]] = -mu[i];
}
}
}
signed main() {
// freopen("in","r",stdin);
cin >> n;
for( int i = 1 ; i <= n ; ++ i ) scanf("%d",&A[i]) , ++ c[A[i]] , lim = max( lim , A[i] );
sieve( lim );
for( int i = 1 ; i <= en ; ++ i )
for( int j = lim / pri[i] ; j ; -- j )
c[j] += c[j * pri[i]];
for( int i = 1 ; i <= lim ; ++ i ) mu[i] *= c[i];
for( int i = 1 ; i <= en ; ++ i )
for( int j = 1 ; j * pri[i] <= lim ; ++ j )
( mu[j * pri[i]] += mu[j] ) %= P;
_[0] = 1;for( int i = 1 ; i < 500006 ; ++ i ) _[i] = _[i - 1] * 2 % P;
for( int i = 1 ; i <= lim ; ++ i ) s[i] = _[c[i]] - 1;
for( int i = en ; i ; -- i )
for( int j = 1 ; j * pri[i] <= lim ; ++ j )
( s[j] -= s[j * pri[i]] ) %= P;
int ans = 0;
for( int i = 2 ; i <= lim ; ++ i ) ( ans += 1ll * s[i] * mu[i] % P ) %= P;
cout << ( ans + P ) % P << endl;
}

CF 585 E Present for Vitalik the Philatelist的更多相关文章

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

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

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

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

  4. 「CF585E」 Present for Vitalik the Philatelist

    「CF585E」 Present for Vitalik the Philatelist 传送门 我们可以考虑枚举 \(S'=S\cup\{x\}\),那么显然有 \(\gcd\{S'\}=1\). ...

  5. CF585E:Present for Vitalik the Philatelist

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

  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. [cf 585 E] Marbles

    (一道Div2E不会,我太难了) 题意: 给你一个长度为$n$的颜色序列$A$,每次操作可以选择两个相邻元素交换,求把序列交换成“相同颜色挨在一起”所需的最少操作数. 按颜色排序:设颜色$col$在序 ...

随机推荐

  1. 八大排序算法之基数排序(python实现)

    [写在前面] 参考文章: https://blog.csdn.net/nrsc272420199/article/details/82691596[给出的示例图,简单易懂,但是对于没一轮循环没有讲解的 ...

  2. python web1

    ***本篇中的测试均需要使用python3完成. 攻击以下面脚本运作的服务器. 针对脚本的代码逻辑,写出生成利用任意代码执行漏洞的恶意序列的脚本: 打开攻击机端口, 将生成的东西输入网页cookie: ...

  3. Java/JDK/J2SE

    Java8与JDK1.8与JDK8与J2SE8与J2SE1.8的区别是什么? Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就 ...

  4. 软工博客之关于CSDN的移动端软件测评

    关于CSDN的移动端软件测评 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件测评作业 我在这个课程的目标 不求变强,只求做好,成为一颗有用的 ...

  5. Spring Cloud Gateway GatewayFilter的使用

    Spring Cloud Gateway GatewayFilter的使用 一.GatewayFilter的作用 二.Spring Cloud Gateway内置的 GatewayFilter 1.A ...

  6. 用建造者模式实现一个防SQL注入的ORM框架

    本文节选自<设计模式就该这样学> 1 建造者模式的链式写法 以构建一门课程为例,一个完整的课程由PPT课件.回放视频.课堂笔记.课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造 ...

  7. CCD摄像头视场角计算公式

    视场角大小和CCD传感器尺寸和镜头焦距有关: 水平视场角 = 2 × arctan(w / 2f); 垂直视场角 = 2 × arctan(h / 2f); 视场角 = 2 × arctan(d / ...

  8. WiFi模块选型参考

    经常会碰到一些关于wifi模块的咨询,很多刚接触wifi模块的设计人员或者用户,只知道提wifi模块,很难提具体的模块要求!希望通过文章的介绍,会做到有的放矢!咨询时一定要搞清楚自己希望使用什么主芯片 ...

  9. Vulnstack内网靶场3

    Vulnstack内网靶场3 (qiyuanxuetang.net) 环境配置 打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行. 挂起状态,账号已默认登陆,cento ...

  10. Linux调整时区和同步时间

    1.调整时区 tzselect 选择Asia -> China -> Beijing Time 2.设置为默认时区 cp -f /usr/share/zoneinfo/Asia/Shang ...