2024 BUPT Programming Contest F
简要题意
多测,给定一个 \(n \times n\) 矩阵,矩阵中的每一个元素的计算方式如下:
- 矩阵的行和列唯一决定两个整数对 \((a, b)\),矩阵第 \(a(0 \le a < n)\) 行第 \(b(0 \le b < n)\) 列的元素为 \(a \times b \bmod n\)
求矩阵中元素 \(m\) 出现的次数。
\(0 \le m < n \le 10^{12}\)
\(1 \le T \le 100\)
题解
对于矩阵中的任意一个元素是独立的,因此我们考虑对于一组 \(a \times b \equiv m \pmod n\) 的合法性。
原式可推出 \(ab + kn = m\),由裴蜀定理可知,当 \(\gcd(a, n) \mid m\) 时,方程有线性整数解。
接下来考虑对于一个合法的 \(a\) 有多少组解是可以被接受的,由于 \(at = sn\),我们想要找到尽可能小的 \((s, t)\) 的一组解,那么 \(t = \frac{n}{\gcd(a, n)}\),若 \(ab \equiv m \pmod n\),那么 \(a\left(b + \frac{n}{\gcd(a, n)}\right) \equiv m \pmod n\)。
对于最小的二元组 \((a, b)\) 使原式成立,必有 \(b < \frac{n}{\gcd(a, n)}\) 成立,若有 \(b \ge \frac{n}{\gcd(a, n)}\),则由 \(a\left(b + \frac{n}{\gcd(a, n)}\right) \equiv m \pmod n\) 可递归定义最小的 \(b\)。
因此,对于任何合法的 \(a\),必存在最小的二元组 \((a, b)\) 使得同余式成立,因此所有的合法解为:
\sum_{a = 0}^{n - 1}\left\lfloor\frac{n}{\frac{n}{\gcd(a, n)}}\right\rfloor[\gcd(a, n) \mid m] &= \sum_{a = 0}^{n - 1}\gcd(a, n)[\gcd(a, n) \mid m] \\
&= \sum_{a = 1}^{n}\gcd(a, n)[\gcd(a, n) \mid m] \\
&= \sum_{d \mid m}d\sum_{a = 1}^{n}[\gcd(a, n) = d] \\
&= \sum_{d \mid m, d \mid n}d\sum_{a = 1}^{n}[\gcd(a, n) = d] \\
&= \sum_{d \mid \gcd(n, m)}d\sum_{a = 1}^{n}\left[\gcd\left(\frac{a}{d}, \frac{n}{d}\right) = 1\right] \\
&= \sum_{d \mid \gcd(n, m)}d\sum_{a = 1}^{\frac{n}{d}}\left[\gcd\left(a, \frac{n}{d}\right) = 1\right] \\
&= \sum_{d \mid \gcd(n, m)}d\varphi\left(\frac{n}{d}\right)
\end{aligned}
\]
参考代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10, mod = 998244353;
ll n, m;
ll primes[N], phi[N], cnt;
bool st[N];
void init()
{
phi[1] = 1;
for (int i = 2; i < N; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i, phi[i] = i - 1;
for (int j = 0; primes[j] * i < N; j ++ )
{
st[primes[j] * i] = 1;
if (i % primes[j] == 0)
{
phi[primes[j] * i] = phi[i] * primes[j];
break;
}
phi[primes[j] * i] = phi[i] * (primes[j] - 1);
}
}
}
ll get_phi(ll x)
{
if (x < N) return phi[x];
ll res = 1;
for (int i = 0; primes[i] * primes[i] <= x; i ++ )
{
if (x % primes[i] == 0) res = res * (primes[i] - 1) % mod, x /= primes[i];
while (x % primes[i] == 0) res = res * primes[i] % mod, x /= primes[i];
}
if (x > 1) res = res * (x - 1) % mod;
return res;
}
void solve()
{
cin >> m >> n;
ll g = __gcd(m, n), ans = 0;
for (ll i = 1; i * i <= g; i ++ )
if (g % i == 0)
{
(ans += i * get_phi(n / i) % mod) %= mod;
if (i * i != g) (ans += (g / i) % mod * get_phi(n / (g / i)) % mod) %= mod;
}
cout << ans << endl;
}
int main()
{
int T;
init();
cin >> T;
while (T -- ) solve();
return 0;
}
2024 BUPT Programming Contest F的更多相关文章
- Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】
F. Contestants Ranking time limit per test:1 second memory limit per test:24 megabytes input:standar ...
- IX Samara Regional Intercollegiate Programming Contest F 三分
F. Two Points time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 2018-2019 ACM-ICPC Brazil Subregional Programming Contest F. Music Festival
题目:https://codeforces.com/gym/101908/problem/F 题意:给你n个舞台,每个舞台有很多个节目,每个节目有个开始时间,结束时间,价值,每个舞台至少出演过一个节目 ...
- The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest - F.Sequence(打表+线段树)
题意:给你一个长度为$n$的数组,定义函数$f(l,r)=a_{l} \oplus a_{l+1} \oplus...\oplus a_{r}$,$F(l,r)=f(l,l)\oplus f(l,l+ ...
- 2018 ACM-ICPC, Syrian Collegiate Programming Contest F - Pretests SOS dp
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...
- The Ninth Hunan Collegiate Programming Contest (2013) Problem F
Problem F Funny Car Racing There is a funny car racing in a city with n junctions and m directed roa ...
- [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)
[AtCoder] NIKKEI Programming Contest 2019 本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Capture the Flag
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5503 The 12th Zhejiang Provincial ...
- zoj The 12th Zhejiang Provincial Collegiate Programming Contest Convert QWERTY to Dvorak
http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5502 The 12th Zhejiang Provincial ...
- 2016 Sichuan Province Programming Contest
2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...
随机推荐
- QTreeWidget折叠子项(折叠当前项的所有子项)
QTreeWidget折叠子项(折叠当前项的所有子项) 本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷. 文章目录 QTreeWidget折叠子项(折叠当前项的所有子项) 一.仅折叠子项 二. ...
- java_类属性&对象属性
访问类属性方式有两种: 对象.类属性 类.类属性 但是理解上第一种方法存在小小小问题, 逻辑没问题 2022年7月31日18:44:29
- 【YashanDB知识库】汇聚库23.1环境发生coredump
[标题]汇聚库23.1环境发生coredump [问题分类]数据库错误 [关键词]YashanDB, 汇聚库, coredump [问题描述]在23.1.1.200版本数据库环境创建dblink.视图 ...
- CSS – 冷知识 (新手)
<img> extra 4px at the bottom 参考: Extra 4px at the bottom of html <img> The mysterious 4 ...
- Figma 学习笔记 – Prototype
挺简单的, 只要知道它有什么, 基本上就会用了 监听 Event Type 监听 Callback Action 过度 Animation Frame Scrolling
- 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
〇.前言 本文通过将 arco 框架的前端项目,部署至 CentOS 7,并访问同服务器的 WebAPI 接口,来简单演示一下,如何将前端项目发布至 Linux 系统. 关于 ASP.NET WebA ...
- .Net 6 SignalR 实际业务开发中遇到的问题及解决办法
一.SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Server-Sent Events(SSE)服务器事件 3.longpolling 长轮询. 如果客户端开启协商,会按顺序 ...
- 「模拟赛」A 层多校联训 4(卖品:CTH)
双倒一啦! 感觉这次最大的错误就是没看 T2.(本质原因还是时间浪费的太多了) 赛时记录在闲话啦 accoder 多校比赛链接 02 表示法 唐诗题!考高精的人都\(**\),输出深度优先搜索解决.高 ...
- 利用cv2.dilate对图像进行膨胀
cv2.getStructuringElement(cv2.MORPH_RECT, (7,7))介绍,请看这个博客.我简要说一下cv2.getStructuringElement,可用于构造一个特定大 ...
- Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
ASM(自动存储管理)在数据库中是非常重要的组成部分,它可以为磁盘提供统一的存储管理.提高磁盘访问的性能和可用性.简化管理复杂度,从而为数据库的运行提供更好的支持. 这里就为大家整理了墨天轮数据社区上 ...