Convolution

定义a⊕b=a×bgcd⁡(a,b)2a \oplus b = \frac{a \times b}{\gcd(a, b) ^ 2}a⊕b=gcd(a,b)2a×b​,bm=∑i=1n∑j=1nai×jc[i⊕j=m]b_m = \sum\limits_{i = 1} ^{n} \sum\limits_{j = 1} ^{n}a_i \times j ^ c [i \oplus j = m]bm​=i=1∑n​j=1∑n​ai​×jc[i⊕j=m],我们要求b1⊕b2⊕⋯⊕bnb_1 \oplus b_2 \oplus \dots \oplus b_nb1​⊕b2​⊕⋯⊕bn​。

因为a⊕ba \oplus ba⊕b的性质,我们可以考虑枚举agcd⁡(a,b),bgcd⁡(a,b)\frac{a}{\gcd(a, b)}, \frac{b}{\gcd(a, b)}gcd(a,b)a​,gcd(a,b)b​,设其为a′,b′a', b'a′,b′,则有gcd⁡(a′,b′)\gcd(a', b')gcd(a′,b′)互质,
bm=∑i=1n∑j=1n[i×j=mgcd⁡(i,j)=1]∑d=1min(ni,nj)(aid(jd)c)∑i=1n∑j=1n[i×j=mgcd⁡(i,j)=1]jc∑d=1min(ni,nj)aiddc设f(i,n)=∑d=1naiddcb_m = \sum_{i = 1} ^{n} \sum_{j = 1} ^{n}[i \times j = m\ \gcd(i, j) = 1] \sum_{d = 1} ^{min(\frac{n}{i}, \frac{n}{j})} (a_{id} (jd) ^ c)\\ \sum_{i = 1} ^{n} \sum_{j = 1} ^{n} [i \times j = m \ \gcd(i, j) = 1] j ^ c \sum_{d = 1} ^{min(\frac{n}{i}, \frac{n}{j})} a_{id} d ^ c\\ 设f(i, n) = \sum_{d = 1} ^{n} a_{id} d ^ c\\ bm​=i=1∑n​j=1∑n​[i×j=m gcd(i,j)=1]d=1∑min(in​,jn​)​(aid​(jd)c)i=1∑n​j=1∑n​[i×j=m gcd(i,j)=1]jcd=1∑min(in​,jn​)​aid​dc设f(i,n)=d=1∑n​aid​dc
容易发现min(ni,nj)min(\frac{n}{i}, \frac{n}{j})min(in​,jn​),如果考虑枚举iii,则可以直接处理出f(i,n)f(i, n)f(i,n),而且整体复杂度还是不变的。

#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10, mod = 998244353;int prime[N], phi[N], f[N], ans[N], a[N], p[N], n, c, cnt;bool st[N];inline int add(int x, int y) {return x + y < mod ? x + y : x + y - mod;
}inline int sub(int x, int y) {return x >= y ? x - y : x - y + mod;
}int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * ans * a % mod;}a = 1ll * a * a % mod;n >>= 1;}return ans;
}void init() {phi[1] = p[1] = 1;for (int i = 2; i < N; i++) {if (!st[i]) {prime[++cnt] = i;phi[i] = i - 1;p[i] = quick_pow(i, c);}for (int j = 1; j <= cnt && 1ll * i * prime[j] < N; j++) {st[i * prime[j]] = 1, p[i * prime[j]] = 1ll * p[i] * p[prime[j]] % mod;if (i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d", &n, &c);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}init();for (int i = 1; i <= n; i++) {for (int j = 1; i * j <= n; j++) {f[j] = add(f[j - 1], 1ll * a[i * j] * p[j] % mod);}for (int j = 1; i * j <= n; j++) {if (phi[i] * phi[j] == phi[i * j]) {ans[i * j] = add(ans[i * j], 1ll * p[j] * f[min(n / i, n / j)] % mod);}}}int res = 0;for (int i = 1; i <= n; i++) {res ^= ans[i];}printf("%d\n", res);return 0;
}

Convolution(2021牛客暑期多校训练营4)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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. OpenCV AKAZE本地特征匹配
  2. IDEA Maven创建多个Module相互依赖
  3. openlayer xyz加载_webGIS实践:3_1_openlayer展绘点线面注记
  4. 接口协议之抓包分析 TCP 协议
  5. 【数字信号去噪】基于matlab中值滤波+奇异值分解(SVD)数字信号降噪【含Matlab源码 1021期】
  6. kali PHP网站渗透,小白日记35:kali渗透测试之Web渗透
  7. 【树莓派】安装C#运行环境
  8. Python 爬虫批量爬取网页图片保存到本地
  9. 技能证里的天花板-阿里云云计算架构师ACE认证将全面升级!
  10. 儿童节html5小游戏,2016六一儿童节主题班会小游戏大全
  11. Photoshop CS6 MAC 中文版破解版 支持Retina屏
  12. http://39.98.219.132 题库标准答案(题库序号:463)之编写一个给一个分数约分的程序
  13. MATLAB下载支持包时出现问题
  14. eclipse全文搜索多个关键字
  15. 异动K线--庄家破绽
  16. 【Kotlin】学习小记-基础篇
  17. C语言经典算法100道实战题
  18. 人生坎坎坷坷,跌跌撞撞那是在所难免
  19. 视频缓存AndroidVideoCache
  20. 标清、高清、超清、1080p

热门文章

  1. python3文件的编码类型是什么_Python3编码类型有哪些?怎么转换?
  2. 软件配置管理(三)软件配置管理核心功能
  3. 那些奇奇怪怪的男性用品......
  4. 在24小时内学完所有的数学是种什么体验?我们做了这个大胆的尝试……
  5. 连锁反应装置积木好玩到尖叫!
  6. 开年趣图汇总:对不起,让你笑了这么久
  7. 为什么离开学校后,学习能力直线下降?
  8. 什么是python扩展库_什么是目前比较常用的Python扩展库管理工具
  9. php语言难点,PHP知识难点TOP3,挑战一下你
  10. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...