G、(2019 ACM/ICPC 全国邀请赛(西安)B) Product

Weblink

https://nanti.jisuanke.com/t/39269

Problem && Solution

%**Hint**因为 mod 不一定是质数,所以没办法求 2 的逆元,所以应该把 `/2` 算出来之后再膜(手贱多写了一个mod最开始还没看出来,所以我为什么会犯这么低级的错误然后找了半个小时才找到这个bug...我好菜啊

AC Code

#include <bits/stdc++.h>
using namespace std;const int N = 5e6 + 6;
int mod;
#define int long long
#define mult(x, y) (1ll * x * y >= mod ? 1ll * x * y % mod : 1ll * x * y)
#define minus(x, y) (1ll * x - y < 0 ? 1ll * x - y + mod : 1ll * x - y)
#define plus(x, y) (1ll * x + y >= mod ? 1ll * x + y - mod : 1ll * x + y)
#define ck(x) (x >= mod : x - mod : x)
typedef long long ll;ll n, m, p;ll primes[N], cnt, num[N], d[N];
ll phi[N];
//ll sum[N];// x * d(x)
bool vis[N];unordered_map<ll, ll> M_sum;
unordered_map<ll, ll> M_phi;void init(ll n)
{d[1] = 1;phi[1] = 1;for(ll i = 2; i <= n; ++ i) {if(vis[i] == 0) {primes[ ++ cnt] = i;phi[i] = i - 1;d[i] = 2, num[i] = 1;}for(ll j = 1; j <= cnt && i * primes[j] <= n; ++ j) {vis[i * primes[j]] = true;if(i % primes[j] == 0) {phi[i * primes[j]] = phi[i] * primes[j];num[i * primes[j]] = num[i] + 1;d[i * primes[j]] = (d[i] / num[i * primes[j]] * (num[i * primes[j]] + 1)) % mod;break;}phi[i * primes[j]] = phi[i] * (primes[j] - 1);num[i * primes[j]] = 1;d[i * primes[j]] = (d[i] * 2) % mod;}}for(ll i = 1; i <= n; ++ i) {phi[i] = (phi[i] + phi[i - 1]) % mod;d[i] = d[i] * i % mod;d[i] = (d[i] + d[i - 1]) % mod;}
}ll qpow(ll a, ll b, ll mod)
{ll res = 1;while(b) {if(b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}inline int g_sum(int x)
{return x;
}inline ll get_sum_phi(int x)
{if(x <= N - 7)return phi[x];if(M_phi[x]) return M_phi[x];ll ans = mult(x, (1ll * x + 1) / 2);ll res = 0;for(ll l = 2, r; l <= x; l = r + 1) {r = x / (x / l);res = plus(res, 1ll * (g_sum(r) - g_sum(l - 1)) * get_sum_phi(x / l)) % mod;}return M_phi[x] = minus(ans, res) % mod;
}inline ll get_sum_sum(ll x)
{if(x <= N - 7) return d[x];if(M_sum[x]) return M_sum[x];ll res = 0;for(ll l = 1, r; l <= x; l = r + 1) {r = x / (x / l);//\sum_k=l^r = 平均值乘上长度 (公差为1的等差数列)res = (res + (1ll * (l + r) * (r - l + 1) / 2) % mod * ((1ll + x / l) * (x / l) / 2) % mod) % mod; //res = (res + (1ll * (l + r) * (r - l + 1) / 2) % mod * (1ll + x / l) % mod * (x / l) / 2 % mod) % mod; }return M_sum[x] = res;
}signed main()
{scanf("%lld%lld%lld", &n, &m, &p);mod = p - 1;init(N - 7);ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = plus(ans, 1ll * get_sum_phi(n / l) * minus(get_sum_sum(r), get_sum_sum(l - 1)) % mod) % mod;}ans = plus(ans, ans) % mod;ans = minus(ans, get_sum_sum(n));printf("%lld\n", qpow(m, ans, p) % p);return 0;
}

2019 ACM - ICPC 西安邀请赛 B. Product (杜教筛) 简单数论(bushi)相关推荐

  1. 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) ...

  2. 2019 ACM - ICPC 全国邀请赛(西安)题解(9 / 13)

    The 2019 ACM-ICPC China Shannxi Provincial Programming Contest 目录 The 2019 ACM-ICPC China Shannxi Pr ...

  3. 2019 ACM/ICPC 全国邀请赛(西安)J And And And (树DP+贡献计算)

    Then n - 1n−1 lines follow. ii-th line contains two integers f_{a_i}(1 \le f_{a_i} < i)fai​​(1≤fa ...

  4. 2019 ACM - ICPC 全国邀请赛(南昌) 题解(9 / 12)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 The 2019 ICPC China Nanchang National Invitation ...

  5. 2019 ACM/ICPC 南京站 E.Observation,区间筛

    题目大意 求 (∑d=LR(fdxor K))(modP)\Big(\sum\limits_{d=L}^{R} (f_d\text{ xor } K)\Big)\pmod{P}(d=L∑R​(fd​  ...

  6. 【线下赛游记】2023 ICPC西安邀请赛 游记

    [线下赛游记]2023 ICPC西安邀请赛 游记 day -2 ​ 现在是周四,虽然周日才开始比赛,但早已是 "激动的心 颤抖的手" 了,上完早八,就决定一直加训到晚上,结果一下午 ...

  7. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  8. 2018 ICPC 徐州网络赛 D. Easy Math(思维,反演,杜教筛)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://nanti.jisuanke.com/t/A2003 Problem 计算 ...

  9. 2019年CCPC - 网络赛E:huntian oy【杜教筛】

    题目: HDU---6706:huntian oy 题意: 给定N,a,b,求下面式子的值(求和后再mod 1e9+7): 分析: 一直怯于杜教筛不敢去学习[一看就会的杜教筛],今天终于迈出了这一步, ...

最新文章

  1. (chap1 网络基础知识)网络的构成要素:(3)交换机
  2. 365篇原创后,有三AI喊你正式加入来不来?
  3. 分布学在flash当中的应用体现
  4. python数据库查询怎么用变量_python中带变量的SQL查询
  5. 科大星云诗社动态20210407
  6. mybatis 时间_开发工具:Mybatis.Plus.插件三种方式的逆向工程
  7. ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
  8. golang mysql遇到的一些问题记录和解决
  9. vivo又有新机跑分曝光 机海战术要来了?
  10. 免费下载高清可商用的图片网站(整理集合)
  11. matlab1到100求和for_一个简单的MATLAB程序(1到100求和)
  12. 关于我用过的机械键盘
  13. 今日金融词汇--- 股权质押
  14. 【node】升级 Node 版本教程
  15. 如何安装与卸载NAS应用程序
  16. 简述你计划使用的应用开发框架,及该框架的特点
  17. 嵌入式 Linux 应用软件知识体系框架
  18. 实体店为什么要做小程序
  19. Hive中数据库和表的操作(HSQL)
  20. 如何使用C-Lodop保存PDF格式文件

热门文章

  1. 使用OpenCV实现图像增强
  2. 基于OpenCV的焊件缺陷检测
  3. 基于OpenCV的条形码区域分割
  4. 用30行代码做一个微信智障机器人
  5. ionic打包/编译遇到的问题
  6. hadoop day 3
  7. 推动健全云生态 阿里云锐不可当
  8. solr5.5.4 添加mysql数据,实现同步更新
  9. [C#反射]C#中的反射解析及使用.
  10. GdiPlus[6]: 五种画刷总览