Product of GCDs

∏d=1nd∑[gcd⁡(s1d,s2d,…,skd)=1]∏d=1nd∑i=1ndμ(i)Cf[id]k\prod_{d = 1} ^{n} d ^{\sum[\gcd(\frac{s_1}{d}, \frac{s_2}{d}, \dots, \frac{s_k}{d}) = 1]}\\ \prod_{d = 1} ^{n} d ^{\sum\limits_{i = 1} ^{\frac{n}{d}} \mu(i) C_{f[id]} ^{k}}\\ d=1∏n​d∑[gcd(ds1​​,ds2​​,…,dsk​​)=1]d=1∏n​di=1∑dn​​μ(i)Cf[id]k​
筛出质数,然后得到phi(mod)phi(mod)phi(mod),即可欧拉降幂写(提供一个思路整体复杂度nlog⁡2nn \log ^ 2 nnlog2n了)。

#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>using namespace std;const int M = 1e7 + 10, N = 8e4 + 10, maxn = 80000;int prime[M], mu[M], cnt;int f[N], n, k;long long C[N][32], mod, phi;bool st[M];inline long long read() {long long x = 0;char c = getchar();while (c < '0' || c > '9') {c = getchar();}while (c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x;
}void Init() {mu[1] = 1;for (int i = 2; i < M; i++) {if (!st[i]) {prime[++cnt] = i;mu[i] = -1;}for (int j = 1; j <= cnt && 1ll * i * prime[j] < M; j++) {st[i * prime[j]] = 1;if (i % prime[j] == 0) {break;}mu[i * prime[j]] = -mu[i];}}
}long long Phi(long long n) {long long ans = n;for (int i = 1; i <= cnt && 1ll * prime[i] * prime[i] <= n; i++) {if (n % prime[i] == 0) {ans = ans / prime[i] * (prime[i] - 1);while (n % prime[i] == 0) {n /= prime[i];}}}if (n > 1) {ans = ans / n * (n - 1);}return ans;
}long long mul(long long x, long long y) { return (__int128)x * y % mod;
}long long quick_pow(long long a, long long n) {long long ans = 1;while (n) {if (n & 1) {ans = mul(ans, a);}a = mul(a, a);n >>= 1;}return ans;
}int main() {// freopen("data05.in", "r", stdin);// freopen("out.txt", "w", stdout);Init();int T;T = read();while (T--) {n = read(), k = read(), mod = read();for (int i = 1; i < N; i++) {f[i] = 0;}for (int i = 1, x; i <= n; i++) {x = read();f[x]++;}for (int i = 1; i <= maxn; i++) {for (int j = 2 * i; j <= maxn; j += i) {f[i] += f[j];}}phi = Phi(mod);C[0][0] = 1;for (int i = 1; i <= maxn; i++) {C[i][0] = 1;for (int j = 1; j <= 30; j++) {C[i][j] = C[i - 1][j - 1] + C[i - 1][j];if (C[i][j] > phi) {C[i][j] -= phi;}}}long long ans = 1;for (int d = 2; d <= maxn; d++) {long long cur = 0;for (int i = 1; i <= maxn / d; i++) {if (mu[i] == -1) {cur -= C[f[i * d]][k];if (cur < 0) {cur += phi;}}else if (mu[i] == 1) {cur += C[f[i * d]][k];if (cur > phi) {cur -= phi;}}}ans = mul(ans, quick_pow(d, cur));}printf("%lld\n", ans);}return 0;
}

J. Product of GCDs(莫比乌斯反演)(2021牛客暑期多校训练营2)相关推荐

  1. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

  2. 2021牛客暑期多校训练营2,签到题CDFKI

    2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...

  3. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  4. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  5. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  6. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  7. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  8. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  9. 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5

    题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...

  10. 2021牛客暑期多校训练营7

    2021牛客暑期多校训练营7 文章目录 2021牛客暑期多校训练营7 F:xay_loves_trees 解释 代码 H:xay_loves_count 解释 代码 I:xay_loves_or 解释 ...

最新文章

  1. 使用迭代器从map或vector中删除元素
  2. 用VC6.0遇到的一个问题
  3. python加法赋值运算符为_Python学习-算术运算符,赋值运算符和复合运算符
  4. 【Linux】14_文件打包及压缩
  5. 【完整代码】Scala AKKA实现两个Actor之间的通信代码示例
  6. 【SpringBoot】SpringBoot整合SpringDataJPA及基本使用
  7. POJ - 2942 Knights of the Round Table (双连通分量)
  8. api 原生hbase_Hbase常用api
  9. session过期后登陆页面跳出iframe页面问题
  10. Modbus寄存器地址规则
  11. CVE-2020-15999:Chrome FreeType 字体库堆溢出原理分析
  12. Windows Mobile 5.0编程—奥运场馆速查
  13. 计算机CG技术未来发展前景,CG就业前景怎么样?
  14. 地图标注不完整图片_“地图帝”不规范使用图件之Anton Balazh作品介绍
  15. 一些开源的项目 收藏
  16. Windows 上安装 Bugzilla 详解
  17. TML5期末大作业:我的家乡网站设计——我的家乡大连 带登录注册表单 轮播
  18. 【MAC M1芯片】PS已解决在M1苹果电脑上出现“闪退”“液化”和WEB等黑屏问题
  19. 如何无损增大C盘容量
  20. continue / break 跳出指定层循环

热门文章

  1. java string 数据结构_数据结构---Java---String、StringBuilder、StringBuffer
  2. java socket 路由_JAVA简单的Socket网络编程!CS
  3. pads中如何设置等长_期货如何设置止损止盈避免交易中被套-期货学习
  4. 人生没有对与错,只是选择不同
  5. 用高等数学“铲雪”!这个200多年前的证明太厉害了,有城市用它省了2000多万..........
  6. 有什么看起来很难,但是其实很简单的题目
  7. 一定要多角度看事物 | 今日最佳
  8. 剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?
  9. 2017年终奖发放,程序员人均11776元排名第一!
  10. 2018年,该转行AI工程师吗?