[SDOI2017]数字表格

[SDOI2017]数字表格

假定n<=m∏i=1n∏j=1mf(gcd(i,j))∏d=1nf(d)∑i=1n∑j=1m[gcd(i,j)=d]∏d=1nf(d)∑i=1nd∑j=1md[gcd(i,j)=1]∏d=1nf(d)∑k=1ndμ(k)nkdmkd由于nd具有分块性质,并且n,m不大,所以我们可以先预处理出斐波那契数列的前缀积,然后进行数论分块即可。注意因为∑k=1ndμ(k)nkdmkd是指数形式,所以我们要对其模上(mod−1)假定n <= m\\ \prod_{i = 1} ^{n} \prod_{j = 1} ^{m} f(gcd(i, j))\\ \prod_{d = 1} ^{n} f(d) ^{\sum\limits_{i = 1} ^{n} \sum\limits_{j = 1} ^{m} [gcd(i, j) = d]}\\ \prod_{d = 1} ^{n} f(d) ^{\sum\limits_{i = 1} ^{\frac{n}{d}} \sum\limits_{j = 1} ^{\frac{m}{d}}[gcd(i, j) = 1]}\\ \prod_{d = 1} ^{n} f(d) ^{\sum\limits_{k = 1} ^{\frac{n}{d}} \mu(k) \frac{n}{kd} \frac{m}{kd}}\\ 由于\frac{n}{d}具有分块性质,并且n,m不大,所以我们可以先预处理出斐波那契数列的前缀积,然后进行数论分块即可。\\ 注意因为\sum\limits_{k = 1} ^{\frac{n}{d}} \mu(k) \frac{n}{kd} \frac{m}{kd}是指数形式,所以我们要对其模上(mod - 1) n<=mi=1nj=1mf(gcd(i,j))d=1nf(d)i=1nj=1m[gcd(i,j)=d]d=1nf(d)i=1dnj=1dm[gcd(i,j)=1]d=1nf(d)k=1dnμ(k)kdnkdmdnnmk=1dnμ(k)kdnkdm(mod1)

交了一发发现TLETLETLE了,O(n)O(n)O(n)的复杂度确实过不了极限数据,,,继续推式子。
T=id∏T=1n∏d∣Tf(d)nTmTμ(Td)舍去nTmT的干扰∏T=1n(∏d∣Tf(d)μ(Td))nTmT所以我们只要预先处理出∏d∣Tf(d)μ(Td),就能n进行求解了。T = id\\ \prod_{T = 1} ^{n} \prod_{d \mid T} f(d)^{\frac{n}{T} \frac{m}{T} \mu(\frac{T}{d})}\\ 舍去\frac{n}{T} \frac{m}{T}的干扰\\ \prod_{T = 1} ^{n}\left(\prod_{d \mid T} f(d) ^{\mu(\frac{T}{d})} \right) ^{\frac{n}{T} \frac{m}{T}}\\ 所以我们只要预先处理出\prod_{d \mid T} f(d) ^{\mu(\frac{T}{d})},就能\sqrt n 进行求解了。 T=idT=1ndTf(d)TnTmμ(dT)TnTmT=1ndTf(d)μ(dT)TnTmdTf(d)μ(dT)n

/*Author : lifehappy
*/
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e6 + 10, mod = 1e9 + 7, Mod = mod - 1;ll prime[N], mu[N], fib[N], phi[N], inv_fib[N], f[N], cnt;bool st[N];ll quick_pow(ll a, int n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans;
}ll inv(ll a) {return quick_pow(a, mod - 2);
}void init() {fib[1] = mu[1] = f[1] = 1;for(int i = 2; i < N; i++) {f[i] = 1;fib[i] = (fib[i - 1] + fib[i - 2]) % mod;if(!st[i]) {prime[++cnt] = i;mu[i] = -1;}for(int j = 1; j <= cnt && 1ll * i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {break;}mu[i * prime[j]] = -mu[i];}}for(int i = 1; i < N; i++) {inv_fib[i] = inv(fib[i]);}for(int i = 1; i < N; i++) {for(int j = i; j < N; j += i) {if(mu[j / i] == 1) {f[j] = f[j] * fib[i] % mod;}else if(mu[j / i] == -1) {f[j] = f[j] * inv_fib[i] % mod;}}}f[0] = 1;for(int i = 1; i < N; i++) {f[i] = f[i] * f[i - 1] % mod;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T;scanf("%d", &T);while(T--) {int n, m;scanf("%d %d", &n, &m);if(n > m) swap(n, m);ll ans = 1;for(int l = 1, r; l <= n; l = r + 1) {r = min(n / (n / l), m / (m / l));ans = ans * quick_pow(f[r] * inv(f[l - 1]) % mod, 1ll * (n / l) * (m / l) % Mod) % mod;}printf("%lld\n", ans);}return 0;
}

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

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

相关文章

#3601. 一个人的数论

#3601. 一个人的数论 首先这个转化还是很巧妙的&#xff0c;或者很套路的&#xff0c;直接莫比乌斯反演&#xff0c;然后看到了自然数幂之和的形式&#xff0c;那么我们就可以转化为多项式处理&#xff0c;项数就减少到了d1&#xff0c;然后看到题目给出的都是质因数分解结果&a…

2019-03-5-算法-进化(最长公共前缀)

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","…

基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(2)

上一篇里面整理了一下需求和思路&#xff0c;自定义了扩展的字典对象&#xff0c;这里我们再继续深入编码。BaseExtensions类&#xff0c;这个类作未来任何需要Key-Value形式扩展的基类1234567891011121314151617181920212223242526272829303132333435363738394041424344454647…

P4196 [CQOI2006]凸多边形 /【模板】半平面交

P4196 [CQOI2006]凸多边形 /【模板】半平面交 本来是个板子题&#xff0c;而且我这个板子之前在POJ写过一些题目了&#xff0c;但是这里一直让我RE。 后来解决办法竟然是&#xff1a;先读入第一个多边形不加边&#xff08;存下来&#xff09;&#xff0c;然后去读其他多边形&a…

自然数幂之和

自然数幂之和 https://blog.csdn.net/suncongbo/article/details/97622131 这个文章的整理非常全面。

kettle 空字符串 null问题解决

今天&#xff0c;在配置kettle同步mysql数据的时候&#xff0c;碰到了kettle把空字符串当成null的情况。 解决步骤&#xff1a; 找到配置文件&#xff1a;C:\Users\用户名.kettle目录中找到kettle.properties添加配置&#xff1a;KETTLE_EMPTY_STRING_DIFFERS_FROM_NULLY重启k…

从你的全世界路过—一群程序员的稻城亚丁游记

转眼之间又即将到九月&#xff0c;又到了这个适合去川西旅游的最佳季节。最近有一些朋友问我稻城亚丁的旅游情况&#xff0c;因此我将去年写的这一篇游记再次发出来&#xff0c;希望对那些有计划去川西旅游的朋友们有帮助&#xff01;温馨提示&#xff1a;本文图片较多&#xf…

Beauty Contest(凸包 + 旋转卡壳(模板))

Beauty Contest 直接跑一个凸包&#xff0c;然后跑一跑旋转卡壳&#xff0c;求最大值就行了。 /*Author : lifehappy */ #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <iostre…

P2303 [SDOI2012] Longge(数论/欧拉函数)

P2303 [SDOI2012] Longge 一道看似非常基础的数论题&#xff0c;但是蕴含了非常多的知识&#xff0c;求解 ∑i1ngcd(i,n)\sum_{i1}^ngcd(i,n) i1∑n​gcd(i,n) 这个东西我们轻松地就能化简成id∗φid*\varphiid∗φ的形式&#xff0c;然后考虑如何快速求解&#xff0c;那么可以…

2019-03-06-算法-进化(三数之和)

题目描述 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有满足条件且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 例如, 给定数组 nums […

2019-03-06-算法-进化(最接近的三数之和)

题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如&#xff0c;给定数组 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 …

P3345 [ZJOI2015]幻想乡战略游戏

P3345 [ZJOI2015]幻想乡战略游戏 带修改带权重心 这是经典的树上寻找关键点的题目&#xff0c;我们使用点分治处理这个问题&#xff0c;因为点分治的特性&#xff0c;就相当于在树上二分了。但是这与倍增不同&#xff0c;倍增只是在链上二分&#xff0c;而点分治则是在整棵树上…

莫比乌斯,欧拉函数题目练习(完结)

Starttime&#xff1a;2020/11/16Start\ time&#xff1a;2020/11/16Start time&#xff1a;2020/11/16 Lastupdatetime:2020/11/28Last\ update\ time: 2020/11/28Last update time:2020/11/28 AC22/22AC\ 22 / 22AC 22/22 解方程 ∑d∣nf(d)σp(nd)σq(n)f∗σpσq有σk∑d∣…

基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(3)

前面两边的代码就是一套初步的工具包架构&#xff0c;基本底层通用&#xff0c;可以移植到任意项目实现类似的需求。接下来&#xff0c;再在我们特定的项目几微助手里面再实现一套基于自己项目的基类&#xff0c;根据项目需求抽象一下项目内的常用方法。理论上&#xff0c;这一…

2019-03-09-算法-进化(从排序数组中删除重复项)

题目描述 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1 给定数组 nums…

P6329 【模板】点分树 | 震波

P6329 【模板】点分树 | 震波 这是一道模板题&#xff0c;需要支持两个操作&#xff0c;操作一就是单点修改点权&#xff0c;操作二就是查询距离x不超过k的点权值和。 我们考虑建出点分树&#xff0c;然后对于每个点维护两个数据结构&#xff0c;一个处理当前分治范围到当前点…

基于SQLite+EF6实现一套自己的Key-Value存储管理工具包(1)

在项目中&#xff0c;经常会需要对一些特定的业务对象进行属性的扩展&#xff0c;而且这些属性的扩展还具备极不可预测性、相互关系松散等特点。大部分的开发人员是最讨厌这类涉及到数据字段扩展的需求变更。这种调整&#xff0c;轻则数据要加字段&#xff0c;重则程序代码要做…

2019-03-09-算法-进化(买卖股票的最佳时机 II)

题目描述 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买…

【C】Natasha V1.3.6.0 的升级日志

文章转载授权级别&#xff1a;C 预计阅读时间&#xff1a;8分钟开源库满足于个人&#xff0c;而完善于大众。Natasha 自稳定版发布之后&#xff0c;众多老铁参与增强改进&#xff0c;感谢如下老铁的反馈&#xff1a;1. 异常搜集在 wenjq0911 建议下&#xff0c;添加…

牛客练习赛69 解方程

解方程 ∑d∣nf(d)σp(nd)σq(n)f∗σpσq有σk∑d∣ndkidk∗If∗idp∗Iidq∗I∑d∣nμ(d)μ∗I对上面式子同时卷上一个μf∗idpidq因为idk是一个完全积性函数&#xff0c;所以idp−1μidpidk∗(μidp)∑d∣ndkμ(nd)(nd)k∑d∣nμ(d)ϵfidq∗(μidp)f(n)∑d∣nμ(d)dp(nd)qf(1…