2020 ICPC 济南 F. Gcd Product

Gcd Product

Cm=∑i=1mAgcd⁡(i,m)Bgcd⁡(k+1−i,m)∑d1∣mAd1∑d2∣mBd2∑i=1m([gcd⁡(id1,md1)=1][d1∣i])([gcd⁡(m+1−id2,md2)=1][d2∣m+1−i])∑d1∣mAd1∑d2∣mBd2∑k1∣md1μ(k1)∑k2∣md2μ(k2)∑i=1m([d1∣i][k1∣id1])([d2∣m+1−i][k2∣m+1−id2])T1=d1×k1,T2=d2×k2∑T1∣m∑d1∣T1Ad1μ(T1d1)∑T2∣m∑d2∣T2Bd2μ(T2d2)∑i=1m[T1∣i][T2∣m+1−i]C_m = \sum_{i = 1} ^{m} A_{\gcd(i, m)} B_{\gcd(k + 1 - i, m)}\\ \sum_{d1 \mid m} A_{d1} \sum_{d_2 \mid m}B_{d_2} \sum_{i = 1} ^{m}\left([\gcd(\frac{i}{d_1}, \frac{m}{d_1}) = 1][d_1 \mid i]\right)\left([\gcd(\frac{m + 1 - i}{d_2}, \frac{m}{d_2}) = 1][d_2 \mid m + 1 - i]\right)\\ \sum_{d_1 \mid m} A_{d_1} \sum_{d_2 \mid m} B_{d_2} \sum_{k_1 \mid \frac{m}{d_1}} \mu(k_1) \sum_{k_2 \mid \frac{m}{d_2}} \mu(k_2) \sum_{i = 1} ^{m} \left([d_1 \mid i][k_1 \mid \frac{i}{d_1}] \right)\left([d_2 \mid m + 1 - i][k_2 \mid \frac{m + 1 - i}{d_2}] \right)\\ T_1 = d_1 \times k_1, T_2 = d_2 \times k_2\\ \sum_{T_1 \mid m} \sum_{d_1 \mid T_1} A_{d_1} \mu(\frac{T_1}{d_1}) \sum_{T_2 \mid m} \sum_{d_2 \mid T_2} B_{d_2} \mu(\frac{T_2}{d_2}) \sum_{i = 1} ^{m} [T_1 \mid i][T_2 \mid m + 1 - i]\\ Cm=i=1mAgcd(i,m)Bgcd(k+1i,m)d1mAd1d2mBd2i=1m([gcd(d1i,d1m)=1][d1i])([gcd(d2m+1i,d2m)=1][d2m+1i])d1mAd1d2mBd2k1d1mμ(k1)k2d2mμ(k2)i=1m([d1i][k1d1i])([d2m+1i][k2d2m+1i])T1=d1×k1,T2=d2×k2T1md1T1Ad1μ(d1T1)T2md2T2Bd2μ(d2T2)i=1m[T1i][T2m+1i]
观察式子,不难发现∑d1∣T1Ad1μ(T1d1),∑d2∣T2Bd2μ(T2d2)\sum\limits_{d_1 \mid T_1} A_{d_1} \mu(\frac{T_1}{d_1}), \sum_{d_2 \mid T_2} B_{d_2} \mu(\frac{T_2}{d_2})d1T1Ad1μ(d1T1),d2T2Bd2μ(d2T2),二者对于给定的T1,T2T_1,T_2T1,T2都是可以确定的,跟变量mmm无关,

f(n)=∑d∣nAdμ(nd),g(n)=∑d∣nBdμ(nd)f(n) = \sum\limits_{d \mid n} A_{d} \mu(\frac{n}{d}), g(n) = \sum_{d \mid n} B_{d} \mu(\frac{n}{d})f(n)=dnAdμ(dn),g(n)=dnBdμ(dn),得到∑T1∣mf(T1)∑T2∣mg(T2)∑i=1m[T1∣i][T2∣m+1−i]\sum\limits_{T_1 \mid m} f(T_1) \sum\limits_{T_2 \mid m} g(T_2) \sum\limits_{i = 1} ^{m}[T_1 \mid i][T_2 \mid m + 1 - i]T1mf(T1)T2mg(T2)i=1m[T1i][T2m+1i]

接下来我们考虑化简∑i=1m[T1∣i][T2∣m+1−i]\sum\limits_{i = 1} ^{m} [T_1 \mid i][T_2 \mid m + 1 - i]i=1m[T1i][T2m+1i]

设i=T1k1,m+1−i=T2k2设i = T_1 k_1, m + 1 - i = T_2 k_2i=T1k1,m+1i=T2k2,则T1k1+T2k2=m+1T_1 k_1 + T_2 k_2 = m + 1T1k1+T2k2=m+1,可得:

同余方程T1k1≡1(modT2),T2k2≡1(modT1)T_1 k_1 \equiv 1 \pmod{T_2}, T_2 k_2 \equiv 1 \pmod{T_1}T1k11(modT2),T2k21(modT1)

T1∣i,T2∣m+1−iT_1 \mid i, T_2 \mid m + 1 - iT1i,T2m+1i,则gcd⁡(T1,T2)∣i,gcd⁡(T1,T2)∣m+1−i\gcd(T_1, T_2) \mid i, \gcd(T_1, T_2) \mid m + 1 - igcd(T1,T2)i,gcd(T1,T2)m+1i,所以gcd⁡(T1,T2)∣m+1\gcd(T_1, T_2) \mid m + 1gcd(T1,T2)m+1

T1∣m,T2∣mT_1 \mid m, T_2 \mid mT1m,T2m,则gcd⁡(T1,T2)∣m\gcd(T_1, T_2) \mid mgcd(T1,T2)m,因为gcd(m,m+1)=1gcd(m, m + 1) = 1gcd(m,m+1)=1,所以有gcd(T1,T2)=1gcd(T_1, T_2) = 1gcd(T1,T2)=1

所以k1,k2k_1, k_2k1,k2,分别在膜T2,T1T_2, T_1T2,T1下有且只有唯一解x1,x2x_1, x_2x1,x2,有x1T1<T1T2,x2T2<T1T2x_1 T_1 < T_1 T_2, x_2 T_2 < T_1 T_2x1T1<T1T2,x2T2<T1T2

可得x1T1+x2T2=T1T2+1x_1T_1 + x_2 T_2 = T_1T_2 + 1x1T1+x2T2=T1T2+1,要使k1T1+k2T2=m+1k_1T_1 + k_2 T_2 = m + 1k1T1+k2T2=m+1

相当于在x1T1+x2T2=T1T2+1x_1T_1 + x_2 T_2 = T_1T_2 + 1x1T1+x2T2=T1T2+1的基础上给x1T1,x2T2x_1T_1,x_2T_2x1T1,x2T2组合分配,凑得m−T1T2m - T_1 T_2mT1T2

m=KT1T2m = KT_1T_2m=KT1T2,所以解的个数就是K=mT1T2K = \frac{m}{T_1T_2}K=T1T2m,则有:
Cm=∑T1∣mf(T1)∑T2∣mg(T2)mT1T2[gcd⁡(T1,T2)=1]T=T1T2∑T∣mmT∑T1∣Tf(T1)g(TT1)[gcd(T1,TT2)=1]C_m = \sum_{T_1 \mid m} f(T_1) \sum_{T_2 \mid m} g(T_2) \frac{m}{T_1T_2}[\gcd(T_1, T_2) = 1]\\ T = T_1 T_2\\ \sum_{T \mid m} \frac{m}{T} \sum_{T_1 \mid T} f(T_1) g(\frac{T}{T_1})[gcd(T_1, \frac{T}{T_2}) = 1]\\ Cm=T1mf(T1)T2mg(T2)T1T2m[gcd(T1,T2)=1]T=T1T2TmTmT1Tf(T1)g(T1T)[gcd(T1,T2T)=1]
先做一次迪利克雷卷积得到f,gf, gf,g,再做一次互质迪利克雷卷积得到∑T1∣Tf(T1)g(TT1)[gcd(T1,TT2)=1]\sum\limits_{T_1 \mid T} f(T_1) g(\frac{T}{T_1})[gcd(T_1, \frac{T}{T_2}) = 1]T1Tf(T1)g(T1T)[gcd(T1,T2T)=1],最后迪利克雷卷积得到答案。

#include <bits/stdc++.h>using namespace std;const int N = 5e5 + 10, mod = 998244353;int prime[N], mu[N], phi[N], A[N], B[N], f[N], g[N], h[N], ans[N], n, cnt;bool st[N];void init() {mu[1] = phi[1] = 1;for (int i = 2; i < N; i++) {if (!st[i]) {prime[++cnt] = i;mu[i] = mod - 1;phi[i] = i - 1;}for (int j = 1; j <= cnt && 1ll * i * prime[j] < N; j++) {st[i * prime[j]] = 1;if (i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);mu[i * prime[j]] = mod - mu[i];}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &A[i]);}for (int i = 1; i <= n; i++) {scanf("%d", &B[i]);}for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j += i) {f[j] = (f[j] + 1ll * A[i] * mu[j / i] % mod) % mod;g[j] = (g[j] + 1ll * B[i] * mu[j / i] % mod) % mod;}}for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j += i) {if (1ll * phi[i] * phi[j / i] == phi[j]) {h[j] = (h[j] + 1ll * f[i] * g[j / i] % mod) % mod;}}}for (int i = 1; i <= n; i++) {for (int j = i; j <= n; j += i) {ans[j] = (ans[j] + 1ll * (j / i) * h[i] % mod) % mod;}}for (int i = 1; i <= n; i++) {ans[i] ^= ans[i - 1];}printf("%d\n", ans[n]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 时间处理

时区、冬令时和夏令时、时间戳 时间戳 距离一个标准参照时间经过的秒数&#xff08;毫秒数&#xff09; 有两个常用参照时间&#xff1a; 1970-01-01 00:00:00 应用最广泛的时间戳参照点2001-01-01 00:00:00 常被苹果系统使用 注意&#xff1a;以上时间节点皆采用UTC的标准时…

试试这个Excel知识测验,得分超过80分算你赢

大家可能都知道&#xff0c;全世界使用Excel的用户超过了10亿。Excel的知识真所谓是博大精深&#xff0c;并且还很有趣味。我最近编写了一个Excel小工具&#xff0c;可以让大家可以在Excel里面进行各种知识小测验&#xff0c;并且与全世界的高手一比高低。这个小工具&#xff0…

SimpleDateFormat与线程安全

SimpleDateFormat不是线程安全的。 SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用&#xff0c;它用来储存和这个sdf相关的日期信息&#xff0c;例如sdf.parse(dateStr)&#xff0c;sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等&#xff…

几道偏序问题(数据结构)

P3157 [CQOI2011]动态逆序对 #include <bits/stdc.h>using namespace std;typedef long long ll;const int N 1e5 10;int root[N], ls[N << 8], rs[N << 8], sum[N << 8], cnt;int n, m, pos[N];inline int lowbit(int x) {return x & (-x); }v…

自学架构设计?帮你总结了 4 个方法

从编程思维到架构思维的升级&#xff0c;是工作 3、5 年的程序员遇到的第一个槛&#xff0c;特别是当你准备晋升考核时。我有个哥们&#xff0c;技术和业务都很不错&#xff0c;腾讯 T2.3 升 T3.1&#xff0c;就卡在了架构设计这部分。架构这个事儿&#xff0c;不像算法和代码&…

如何在东八区的计算机上获取美国时间

既可以用旧API&#xff08;JDK8之前&#xff09;&#xff0c;也可以使用新API。以下用旧API为例&#xff1a; 在Java语言中&#xff0c;可以通过java.util.Calendar类取得一个本地时间或者指定时区的时间实例&#xff0c;如下&#xff1a; // 取得本地时间&#xff1a; Calen…

Wannafly挑战赛24 无限手套(生成函数)

无限手套 每种宝石的生成函数为∑n≥0xn(ain2bin1)对其进行化简∑n≥0xn∑n≥0binxn∑n≥0ain2xn11−xbix(1−x)2aix(1x)(1−x)3最后答案∏i1m((ai−bi1)x2(aibi−2)x1)(1−x)3m每种宝石的生成函数为\sum_{n \geq 0} x ^ n(a_i n ^ 2 b_i n 1)\\ 对其进行化简\sum_{n \geq 0}…

.NET Core 3.0及ASP.NET Core 3.0 前瞻

前几天微软发布了 .NET Core 3.0 Preview 9 &#xff0c;这是.NET Core 3.0 最后一个预览版。[翻译] .NET Core 3.0 Preview 9 发布.NET Core 3.0 正式发布将在.NET Conf 上发布&#xff0c;.NET Conf 时间是9月23日至25日。Visual Studio 2019 16.3预览版3和Visual Studio for…

有了Unicode为啥还需要UTF-8

有了Unicode为啥还需要UTF-8 要回答这个问题&#xff0c;需要吃透“编码”的概念&#xff0c;刚好看到大神阮一峰写的文章&#xff1a;字符编码笔记&#xff1a;ASCII&#xff0c;Unicode 和 UTF-8 抄录如下&#xff0c;便于查找&#xff1a; 一、ASCII 码 我们知道&#xf…

2019ICPC西安邀请赛 E. Tree(树剖 + 线段树)

Tree 给定一棵树&#xff0c;节点有点权&#xff0c;然后有三种操作&#xff1a; 一、修改1−>s1->s1−>s的路径上的点权与ttt进行按位或。 二、修改1−>s1->s1−>s的路径上的点权与ttt进行按位与。 三、查询1−>s1->s1−>s的路径上的点权异或和…

升职却不加薪,为什么我还觉得老板说的挺有道理

前几天晚上&#xff0c;DevOps交流群里&#xff0c;有人抛出这样一个观点&#xff1a;如果有人来找我加薪&#xff0c;我一定告诉他我要给他升职&#xff0c;因为升职是免费的&#xff0c;加薪可是真的要花钱。但是我也会许诺他&#xff0c;如果他能把那个团队搞好&#xff0c;…

GBK、GB2312、GB18030

GBK、GB2312都是编码方式&#xff0c;都是双字节字符集&#xff0c;GB18030编码是一二四字节变长编码 GB&#xff1a;国标&#xff0c;国家标准 BIG5&#xff1a; 支持繁体中文 GB2312&#xff1a; 支持简体中文&#xff08;GBK的子集&#xff09; 共收录 6763 个汉字 GBK&…

2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)

Paper Grading 题意&#xff1a;给定nnn个字符串&#xff0c;有两种操作&#xff1a; 一、给定i,ji, ji,j&#xff0c;交换第iii个跟第jjj个字符串。 二、给定 str &#xff0c;k,l,rk, l, rk,l,r&#xff0c;问你在区间[l,r][l, r][l,r]中的字符&#xff0c;与 str 至少有k…

细节之中自有天地,整洁成就卓越代码

溪源 | 长沙.NET技术社区开篇我们总是很容易就能写出满足某个特定功能的代码&#xff0c;却很难写出优雅代码。又最欣赏那些优雅的代码&#xff0c;因为优雅代码更能体现一个开发者的积累。就像写一篇散文&#xff0c;有的就像初学者不得其门而入&#xff0c;遣词造句都非常困难…

#2693. jzptab

jzptab ∑i1n∑j1mlcm(i,j)∑i1n∑j1mijgcd⁡(i,j)∑d1nd∑i1nd∑j1mdij[gcd⁡(i,j)1]∑d1nd∑k1ndk2μ(k)∑i1nkdi∑j1mkdjTkd,f(n)∑i1ni∑T1nf(nT)f(mT)(T∑k∣Tμ(k)k)设g(n)n∑d∣nμ(d)d先令g(n)g(n)ng(1)1,g(p)μ(1)μ(p)p1−p,g(pk,k≥2)1−p同时是积性函数&#xff0c…

UTF8、UTF16、UTF32区别

UTF8、UTF16、UTF32都是unicode字符集的字符编码。 UTF意思是unicode转换格式&#xff08;Unicode transform format&#xff09;&#xff0c;出现UTF8、UTF16、UTF32是出于要在内存中存储字符的目的而对unicode字符编号进行编码。 UTF8、UTF16、UTF32区别&#xff1a;&#…

URL编解码、Big Endian和Little Endian

一、Endian的起源 在各种计算机体系结构中&#xff0c;对于字节、字等的存储机制有所不同&#xff0c;因而引发了计算机通信领域中一个很重要的问题&#xff0c;即通信双方交流的信息单元&#xff08;比特、字节、字、双字等等&#xff09;应该以什么样的顺序进行传送。如果不达…

一次业务网关用ASP.NET Core 2.1重构的小结

前言对于API网关&#xff0c;业界貌似对它进行下划分&#xff0c;有下面几个分类/场景。面向Web App面向Mobile App面向Partner OpenAPI面向Partner ExternalAPI其他。。。在18年8月份的时候&#xff0c;有幸用.NET Core 2.1重构了一个对外的业务网关项目&#xff0c;这个项目的…

导数卷积 (NTT)

导数卷积 有f(x)∑i0n−1aixi求g(x)∑i0n−1f(i)(x)f(n−i−1)(x)∑i0n−1∑j0n−1aij(ij)!j!∑k0n−1ak(n−i−1)(k(n−i−1))!k!设F(n)ann!我们单独求解g(x)的第m项&#xff0c;有gm∑i0n−1∑j1d(F(ij)∗F(n−i−1d−j))(1j!∗1(d−j)!)设H(n)1n!有f(x) \sum_{i 0} ^{n - …

Java如何解决乱码问题

java在字符串中统一用Unicode表示。 对于任意一个字符串&#xff1a;String string “测试字符串”; 如果源文件是GBK编码&#xff0c;操作系统默认环境编码也为GBK&#xff0c;那么编译的时候&#xff0c;JVM将按照GBK编码将字节数组解析为字符&#xff0c;然后将字符转换为…