题解:HDU5780 gcd

news/2025/2/10 9:16:30/文章来源:https://www.cnblogs.com/Pentimentqwq/p/18707107

题意:求:

\[\sum_{i=1}^n\sum_{j=1}^n\gcd(x^i-1,x^j-1) \]

\(T\) 次询问,\(T\le300\)\(x,n\le10^6\)。对 \(10^9+7\) 取模。


记录一下这个神奇的东西:

\[\gcd(x^a-1,x^b-1)=x^{\gcd(x,y)}-1 \]

有类似性质的还有斐波那契数列等。

证明:

定义分圆多项式:

\[\phi_n(x)=\prod_{i=0}^{n-1}(x-\omega_n^i)^{[i\perp n]} \]

即以所有 \(n\) 次本原单位根为根的多项式,其次数为 \(\varphi(n)\),系数为 \(\pm1\)

有什么用?由于 \(x^n-1\) 的根就是所有 \(n\) 次单位根,有:

\[\begin{aligned} x^n-1&=\prod_{i=0}^{n-1}(x-\omega_n^i)\\ &=\prod_{d|n}\prod_{i=0}^{n-1}(x-\omega_n^i)^{[\gcd(n,i)=d]}\\ &=\prod_{d|n}\prod_{i=0}^{n/d-1}(x-\omega_{n/d}^i)^{[i\perp n/d]}\\ &=\prod_{d|n}\phi_{n/d}(x)\\ &=\prod_{d|n}\phi_d(x) \end{aligned} \]

\(x^n-1\) 可以表示成其所有因数的分圆多项式的乘积。

得到了 \(x^n-1\) 的分解后,上面的性质就一目了然了。


说回本题,所求即为:

\[\sum_{i=1}^n\sum_{j=1}^n\gcd(x^i-1,x^j-1)=\sum_{i=1}^n\sum_{j=1}^n(x^{\gcd(i,j)}-1) \]

枚举 \(\gcd\)

\[\sum_{d=1}^n(x^d-1)\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=d] \]

后面那一坨典中典了,就是 \(2\sum\limits_{i=1}^{n/d}\varphi(i)-1\)

那么原式即为:

\[\sum_{d=1}^n(x^d-1)\left(2\sum_{i=1}^{n/d}\varphi(i)-1\right) \]

整除分块,现在要求:

\[\sum_{d=l}^r(x^d-1)=\dfrac{x^l(x^{r-l+1}-1)}{x-1}-(r-l+1) \]

然后就能做了,时间复杂度为 \(\mathcal O(T\sqrt n\log n)\),如果预处理 \(x\) 的块幂的话可以做到 \(\mathcal O(T\sqrt n)\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5, p = 1e9 + 7;
int T, x, n, inv, tot, pri[N], phi[N];
bool vis[N];
void sieve(int n) {phi[1] = 1;for (int i = 2, k, p; i <= n; i++) {if (!vis[i]) pri[++tot] = i, phi[i] = i - 1;for (int j = 1; j <= tot && (k = i * (p = pri[j])) <= n; j++) {vis[k] = 1;if (!(i % p)) { phi[k] = phi[i] * p; break; }phi[k] = phi[i] * (p - 1);}}for (int i = 1; i <= n; i++) phi[i] = (phi[i - 1] + phi[i]) % p;
}
int qpow(int a, int b) {int c = 1;while (b) { if (b & 1) c = (ll)c * a % p; a = (ll)a * a % p, b >>= 1; }return c;
}
int sum(int l, int r) {return ((ll)qpow(x, l) * (qpow(x, r - l + 1) - 1) % p * inv % p + p - (r - l + 1)) % p;
}
int main() {sieve(1e6);scanf("%d", &T);while (T--) {scanf("%d%d", &x, &n);if (x == 1) { printf("0\n"); continue; }inv = qpow(x - 1, p - 2);int ans = 0;for (int l = 1, r, k; l <= n; l = r + 1) {r = n / (k = n / l);ans = (ans + (ll)(phi[k] * 2 - 1) * sum(l, r)) % p;}printf("%d\n", ans);}
}
/*
5
3 1
4 2
8 7
10 5
10 8
*/

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

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

相关文章

hot100-腐烂的橘子

思路 每个腐烂橘子向四周感染一次,直到没有新鲜橘子所需的最少时间。其中一定设计图的遍历,那么是DFS还是BFS?因为要求一层层感染完的最少时间,所以用BFS。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。 为了判断是否有…

DeepSeek-Janus-Pro环境搭建推理测试

引子 北京时间1月28日凌晨,近期爆红的国产大模型DeepSeek在GitHub平台发布了Janus-Pro多模态大模型,这是继Janus发布之后的一次较大幅度升级。该款大模型是2024年11月13日发布的JanusFlow大模型的高级版本。相比前一代模型,Janus-Pro优化了训练策略、扩展了训练数据,模型也…

在 PyTorch 中理解词向量,将单词转换为有用的向量表示

你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点。 那么,假设你有一堆单词,它可以只是一个简单的字符串数组。 animals = ["cat", "dog", "rat", "pig"] 你没法直接…

解决 virsh 无法通过 console 登录虚拟机

报错信息解决方法 登录虚拟机 通过 vnc 或者 ssh登录虚拟机 在虚拟机中执行已执行内容 echo "ttyS0" >> /etc/securetty echo "S0:12345:respawn:/sbin/agetty ttyS0 115200, 1152000 xterm" >>/etc/inittab grub2.cfg grep kernel /etc/grub2…

【分享】Ftrans内外网数据交换方案:打破网络边界,高效融合数据!

随着网络技术和互联网技术的成熟和高速发展,来自互联网的安全威胁越来越严重。数据隔离对很多企业来说并不陌生,越来越多的企业选择网络隔离技术来保护网络安全,而在500强企业中,使用网络隔离技术的企业几乎是绝对性的占比。网络隔离后,仍存在数据交换的需求,内外网数据交…

[gym 102428] Fabricating Sculptures

前言 现在补题是不是不太好 思路 转化题意给定列数 \(S\) , 方块数 \(B\) , 求一种摆放方式, 使得每一列的方块数 \(a_i\) 满足 \(a_i \geq 1\) 且 \(a_i\) 呈非严格单峰观察单峰函数的性质, 发现如果按行处理, 就是单调不增的 更一般的, 每一行放置的方块数非严格小于上一行放…

重做 CF906E Reverses

不是,JJ 怎么退役了,悲。 嗯,先有\[dp_{r}=\min_{l=1}^r[s(l,r)\text{是回文串,且长度不为 2}]dp_{l-1}+1 \] 总复杂度就 \(n^2\),考虑优化 然后有引理说,一个字符串的所有 border 构成 \(\log n\) 个等差数列 我们考虑什么样的点能够转移到 \(dp_i\)尝试借助 \(log\) 段…

Zerto 10.0 Update 6 下载 - 适用于本地、混合和多云环境的灾难恢复和数据保护

Zerto 10.0 Update 6 下载 - 适用于本地、混合和多云环境的灾难恢复和数据保护Zerto 10.0 U6 - 适用于本地、混合和多云环境的灾难恢复和数据保护 勒索软件防护、灾难恢复和多云移动性的统一解决方案 请访问原文链接:https://sysin.org/blog/zerto-10/ 查看最新版。原创作品,…

OpenWrt 24.10 OVF:在 ESXi 8.0、Fusion 13 和 Workstation 17 上运行 OpenWrt 的简单方法

OpenWrt 24.10 OVF:在 ESXi 8.0、Fusion 13 和 Workstation 17 上运行 OpenWrt 的简单方法OpenWrt 24.10 OVF:在 ESXi 8.0、Fusion 13 和 Workstation 17 上运行 OpenWrt 的简单方法 OpenWrt 24.10.0 x86_64 OVF 请访问原文链接:https://sysin.org/blog/openwrt-ovf/ 查看最…

SQL Server 2022新功能:将数据库备份到S3兼容的对象存储

SQL Server 2022新功能:将数据库备份到S3兼容的对象存储 本文介绍将S3兼容的对象存储用作数据库备份目标所需的概念、要求和组件。 数据库备份和恢复功能在概念上类似于使用SQL Server备份到Azure Blob存储的URL作为备份设备类型。 要注意的是,不只是amazon S3对象存储,只要…

护眼神器!LightBulb电脑屏幕护眼软件,你值得拥有!

点击上方蓝字关注我 前言 LightBulb是一个免费的护眼软件,它可以帮助我们在晚上或长时间看电脑屏幕时,减少眼睛的不舒服和疲劳。这个软件会随着一天时间的推移,自动调整电脑屏幕的颜色。比如,在白天,它会让屏幕颜色更偏向冷蓝色,就像阳光下的颜色;到了晚上,它会让屏幕颜…