B. Product(2019ICPC西安邀请赛)(杜教筛)

Product

∑i=1n∑j=1n∑k=1ngcd⁡(i,j)[k∣gcd⁡(i,j)]∑k=1n∑i=1nk∑j=1nkgcd⁡(ik,jk)∑k=1nk∑i=1nk∑j=1nkgcd⁡(i,j)∑k=1nk∑d=1nkd∑i=1nkd∑j=1nkd[gcd⁡(i,j)=1]∑k=1nk∑d=1nkd(∑i=1nkd2ϕ(i)−1)T=kd∑T=1n∑k∣Tk×Tk(∑i=1nT2ϕ(i)−1)∑T=1nTσ0(T)(∑i=1nT2ϕ(i)−1)\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \sum_{k = 1} ^{n} \gcd(i, j)[k \mid \gcd(i, j)]\\ \sum_{k = 1} ^{n} \sum_{i = 1} ^{\frac{n}{k}} \sum_{j = 1} ^{\frac{n}{k}} \gcd(ik, jk)\\ \sum_{k = 1} ^{n} k \sum_{i = 1} ^{\frac{n}{k}} \sum_{j = 1} ^{\frac{n}{k}} \gcd(i, j)\\ \sum_{k = 1} ^{n} k \sum_{d = 1} ^{\frac{n}{k}} d \sum_{i = 1} ^{\frac{n}{kd}} \sum_{j = 1} ^{\frac{n}{kd}} [\gcd(i, j) = 1]\\ \sum_{k = 1} ^{n} k \sum_{d = 1} ^{\frac{n}{k}} d \left(\sum_{i = 1} ^{\frac{n}{kd}} 2 \phi(i) - 1\right)\\ T = kd\\ \sum_{T = 1} ^{n} \sum_{k \mid T} k \times \frac{T}{k} \left(\sum_{i = 1} ^{\frac{n}{T}} 2 \phi(i) - 1\right)\\ \sum_{T = 1} ^{n} T \sigma_0(T) \left(\sum_{i = 1} ^{\frac{n}{T}} 2 \phi(i) - 1\right) i=1nj=1nk=1ngcd(i,j)[kgcd(i,j)]k=1ni=1knj=1kngcd(ik,jk)k=1nki=1knj=1kngcd(i,j)k=1nkd=1kndi=1kdnj=1kdn[gcd(i,j)=1]k=1nkd=1kndi=1kdn2ϕ(i)1T=kdT=1nkTk×kTi=1Tn2ϕ(i)1T=1nTσ0(T)i=1Tn2ϕ(i)1

f(n)=∑i=1niσ0(i)f(n) = \sum\limits_{i = 1} ^{n} i \sigma_0(i)f(n)=i=1niσ0(i)
∑i=1ni∑d∣i∑d=1n∑i=1ndi×d∑d=1nd(nd+1)nd2\sum_{i = 1} ^{n} i \sum_{d \mid i}\\ \sum_{d = 1} ^{n} \sum_{i = 1} ^{\frac{n}{d}} i \times d\\ \sum_{d = 1} ^{n} d \frac{ (\frac{n}{d} + 1) \frac{n}{d}}{2} i=1nidid=1ni=1dni×dd=1nd2(dn+1)dn

#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int f[N], num[N], phi[N], prime[N], primes[N], cnt;bool st[N];int n, m, p, mod;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;
}void init() {f[1] = phi[1] = 1;for (int i = 2; i < N; i++) {if (!st[i]) {prime[++cnt] = i;phi[i] = i - 1;f[i] = 2;num[i] = 1;primes[i] = i;}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];f[i * prime[j]] = f[i / primes[i]] * (num[i] + 2);num[i * prime[j]] = num[i] + 1;primes[i * prime[j]] = primes[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);f[i * prime[j]] = f[i] * 2;num[i * prime[j]] = 1;primes[i * prime[j]] = prime[j];}}for (int i = 1; i < N; i++) {phi[i] = add(phi[i], phi[i - 1]);f[i] = add(1ll * i * f[i] % mod, f[i - 1]);}
}unordered_map<int, int> Phi;int Djs_phi(int n) {if (n < N) {return phi[n];}if (Phi.count(n)) {return Phi[n];}int ans = 1ll * n * (n + 1) / 2 % mod;for (int l = 2, r; l <= n; l = r + 1) {r = n / (n / l);ans = sub(ans, Djs_phi(n / l) * (r - l + 1) % mod);}return Phi[n] = ans;
}unordered_map<int, int> f1;int calc1(int l, int r) {return 1ll * (l + r) * (r - l + 1) / 2 % mod;
}int F(int n) {if (n < N) {return f[n];}if (f1.count(n)) {return f1[n];}int ans = 0;for (int l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = add(ans, 1ll * (n / l) * (n / l + 1) / 2 % mod * calc1(l, r) % mod);}return f1[n] = ans;
}int calc(int n) {return sub(2ll * Djs_phi(n) % mod, 1);
}int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * ans * a % p;}n >>= 1;a = 1ll * a * a % p;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("ou.txt", "w", stdout);scanf("%d %d %d", &n, &m, &p);mod = p - 1;init();int ans = 0;for (int l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = add(ans, 1ll * sub(F(r), F(l - 1)) * calc(n / l) % mod);}printf("%d\n", quick_pow(m, ans));return 0;
}

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

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

相关文章

ArangoDB 3.5发布:流事务API、蒙面数据、搜索性能大幅提升、最短路径功能

ArangoDB 3.5 发布了。ArangoDB 是一个分布式原生的多模型数据库&#xff0c;具有灵活的文档、图形和键值数据模型。使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序。此版本亮点包括&#xff1a;期待已久的 Streaming Transactions API&#xff0c;可以直接使用…

Java StringBuffer相关解惑

在编程过程中遇到的StringBuffer初始化以及赋值的时候&#xff0c;遇到的问题。 StringBuffer sbnew StringBuffer(); // StringBuffer sb1new StringBuffer(1000); // System.out.println("sb capacity:"sb.capacity()); //默认容量是16&#xff0c;StringB…

P3511 [POI2010]MOS-Bridges(网络流/欧拉回路)

P3511 [POI2010]MOS-Bridges 给出一个图&#xff0c;边正着走和反着走的边权不同&#xff0c;求解最大边权最小的欧拉回路&#xff0c;输出方案。 首先看到最大边权最小我们就可以想到二分答案&#xff0c;然后现在在剩余的图上我们要判断是否存在欧拉回路&#xff0c;我们可…

Easy Math(ACM-ICPC 2018 徐州赛区网络预赛)(递归 + 杜教筛)

Easy Math 推式子 ∑i1mμ(in)∑i1mμ(indd)&#xff0c;d是n的一个质因子i,d互质项有(−∑i1mμ(ind))&#xff0c;由于减去了多余的非互质项&#xff0c;所以加上&#xff0c;−∑i1mμ(ind)∑i1mdμ(idnd)−∑i1mμ(ind)∑i1mdμ(in)\sum_{i 1} ^{m} \mu(in)\\ \sum_{i 1…

英雄会在线编程题目(请大家不吝赐教)

<span style"font-size:18px;">最近看了一道英雄会在线编程题目&#xff0c;题目的介绍如下&#xff1a;</span> <span style"font-size:18px;"></span> <span style"font-size:18px;">题目详情&#xff1a;</…

P2304 [NOI2015] 小园丁与老司机(网络流/上下界网络流)

P2304 [NOI2015] 小园丁与老司机 平面上有n个点&#xff0c;每次可以向左、右、上、左上45度、右上45度移动&#xff0c;然后直线移动到达第一个没有到过的点&#xff0c;如果没有这样的点就不能移动&#xff0c;求解一条最长路&#xff0c;然后求解将所有可能不是左右移动的道…

ASP.NET Core on K8S深入学习(7)Dashboard知多少

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。在第二篇《部署过程解析与Dashboard》中介绍了如何部署Dashboard&#xff0c;但是没有更多地介绍如何使用Dashboard&#xff0c;本文就来对Dashboard的使用进行补充。…

Convex Hull (ACM-ICPC 2018 沈阳赛区网络预赛) 存个公式

Convex Hull gay(i){0ifikxx,x>k,k>1iielse}求∑i1n∑j1igay(j)∑i1n(n−i1)gay(i)∑i1n(n−i1)μ2(i)i2因为μ2(n)∑i2∣nμ(i)&#xff0c;容斥定理显然得到有原式∑i1n(n−i1)i2∑j2∣iμ(j)(n1)∑i1n∑j2∣iμ(j)−∑i1ni3∑j2∣iμ(j)(n1)∑j1nμ(j)∑j2∣ii2−∑j1…

程序员的自我修养

一、技术类——互联网天际的摘星者 Unix环境高级编程&#xff08;第3版&#xff09; 编程珠玑 Python核心编程&#xff08;第二版&#xff09; 算法谜题 JavaScript框架设计 鸟哥的Linux私房菜 基础学习篇(第三版) 游戏机制——高级游戏设计技术 第一本Docker书 Swift …

多项式对数函数|指数函数(多项式)

多项式对数函数|指数函数 这个思路就是先求导然后再积分&#xff0c;这样就可以得到一个式子&#xff0c;对于多项式对数函数&#xff0c;我们就可以直接求解了&#xff0c;然后对于多项式指数函数还需要使用分治fft。 多项式对数&#xff1a; #include<bits/stdc.h> …

P5221 Product(反演)

P5221 Product 推式子 ∏i1n∏j1nlcm(i,j)gcd(i,j)∏i1n∏j1nijgcd(i,j)2我们考虑上面∏i1n∏j1nij∏i1nin∏j1nj∏i1ninn!n!n∏i1nin最后得到n!2n再考虑下面化简∏i1n∏j1ngcd(i,j)2∏d1nd2∑i1nd∑j1nd[gcd(i,j)1]对∑i1nd∑j1nd[gcd(i,j)1]化简∑k1ndμ(k)(nkd)2整体化简后…

【学习笔记】Docker - 02. 在容器中运行软件(上)

2.1 控制容器: 构建一个网站监视器 需求: 客户想让你做一个网站, 这个网站需要被紧密的监视, 如果服务器宕机了, 那么它们的团队会收到相关的邮件. 这里用到了3个容器. 第一个运行NGINX; 第二个运行一个叫做mailer的程序. 这两个容器都是detached的. Detached 表示容器将在后台…

P4249 [WC2007]剪刀石头布(网络流/费用流)

P4249 [WC2007]剪刀石头布 在一个竞赛图上一些边的方向已经确定&#xff0c;但是还有一些边的方向没有确定&#xff0c;求解最多有多少三元环。 首先看到三元环个数&#xff0c;按照套路我们利用度数计算&#xff0c;然后考虑每一条边&#xff0c;每一条边的贡献就是使两个点…

算法学习之旅

问题&#xff1a;设计一个算法&#xff0c;计算出n阶乘中尾部零的个数 例如: 11! 39916800&#xff0c;因此应该返回 2 挑战&#xff1a;O(logN)的时间复杂度 想法1&#xff1a; 找出1–n中每个数字能够被5或者10整除的次数&#xff0c;加在一起就是答案。但是时间复杂度是…

P6810 「MCOI-02」Convex Hull 凸包

P6810 「MCOI-02」Convex Hull 凸包 思路 ∑i1n∑j1mτ(i)τ(j)τ(gcd(i,j))∑d1nτ(d)∑i1nd∑j1mdτ(id)τ(id)[gcd(i,j)1]∑d1nτ(d)∑k1ndμ(k)∑i1ndk∑j1mdkτ(idk)τ(idk)tkd∑t1n∑i1ntτ(it)∑j1mtτ(jt)∑d∣tτ(d)μ(td)∑d∣tτ(d)μ(td)τ∗μ,有τ(n)∑d∣n∑d∣…

P6295 有标号 DAG 计数(多项式指数函数对数函数/二项式反演/动态规划/生成函数)

P6295 有标号 DAG 计数 https://www.luogu.com.cn/problem/P6295 求解n个点的有标号弱联通DAG个数 首先根据exp的组合意义&#xff0c;我们考虑指数型生成函数&#xff0c;那么我们先求出不要求弱联通的个数&#xff0c;然后ln回去就是弱联通的DAG个数。 然后考虑进行dp&…

使用.Net Core CLI命令dotnet new创建自定义模板

文章起源来自一篇博客&#xff1a;使用 .NET CORE 创建 项目模板&#xff0c;模板项目&#xff0c;Template - DeepThought - 博客园之前使用Abp的时候就很认同Abp创建模板项目的方式。想不到.Net Core出了更赞的方式创建模板。之前写过一个系列文章&#xff0c;有不少对Abp框架…

lintcode 有效的括号序列

心血来潮&#xff0c;半夜做了一道Lintcode的题目&#xff0c;调试完睡觉&#xff0c;欢迎大家批评指正。 public boolean isValidParentheses(String s) {// Write your code hereStack stacknew Stack();if(s.length()0){return true;}else if(s.length()1){return false;}fo…

C++ 预处理命令

C 预处理命令 https://www.luogu.com.cn/blog/ofnoname/yu-chu-li-ming-ling#

P3312 [SDOI2014]数表(离线 + 树状数组前缀和优化)

P3312 [SDOI2014]数表 推式子 ∑i1n∑j1mσ(gcd(i,j))∑d1nσ(d)∑i1nd∑j1md[gcd(i,,j)1]∑d1nσ(d)∑d1ndμ(k)nkdmkdtkd∑t1nntmt∑d∣tσ(d)μ(td)\sum_{i 1}^{n} \sum_{j 1} ^{m} \sigma(gcd(i, j))\\ \sum_{d 1} ^{n} \sigma(d) \sum_{i 1} ^{\frac{n}{d}} \sum_{j …