简要题意

多测,给定一个 \(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)\) 使得同余式成立,因此所有的合法解为:

\[\begin{aligned}

\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的更多相关文章

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

  2. 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 ...

  3. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest F. Music Festival

    题目:https://codeforces.com/gym/101908/problem/F 题意:给你n个舞台,每个舞台有很多个节目,每个节目有个开始时间,结束时间,价值,每个舞台至少出演过一个节目 ...

  4. 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+ ...

  5. 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 ...

  6. 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 ...

  7. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

  8. 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 ...

  9. 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 ...

  10. 2016 Sichuan Province Programming Contest

    2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...

随机推荐

  1. Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

    众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程 ...

  2. 【YashanDB知识库】共享集群YAC换IP

    [标题]共享集群YAC换IP [需求分类]安装部署,配置变更 [关键字]安装部署,更换IP,运维,配置变更,高可用,YAC [需求描述]客户需要将已经部署的YAC集群更换IP,从测试网段切换生产网段 ...

  3. 8.4linux定时任务-环境变量-数据库

    配合SUID本地环境变量提权 思路原理:利用sh环境变量替换,使得/tmp/ps得到root权限:ps=sh 过程:手写调用文件-编译-复制文件-增加环境变量-执行 gcc demon1.c -o s ...

  4. 第一个鸿蒙程序Hello Word

    DevEco Studio介绍 HUAWEI DevEco Studio(以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备 ...

  5. 【JS设计模式笔记】神奇的魔术师-简单工厂模式(创建型)

    简单工厂模式(Simple Factory):又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例.主要用来创建同一类对象. 第一次需求 开发一个登录模块的需求,用户名输入框如果输入的内容不 ...

  6. Nuxt Kit 的使用指南:从加载到构建

    title: Nuxt Kit 的使用指南:从加载到构建 date: 2024/9/12 updated: 2024/9/12 author: cmdragon excerpt: 摘要:本文详细介绍了 ...

  7. CSS & JS Effect – Image Overlay

    介绍 一张背景图, 一行写字, 一层黑影 (Image Overlay), 如果没有做黑影, 字的颜色容易和图片撞, contrast 就会很烂. HTML 结构 <div class=&quo ...

  8. 推荐3款卓越的 .NET 开源搜索组件库

    前言 最近有不少同学提问:.NET有哪些开源的搜索组件库可以推荐的吗?,今天大姚给大家推荐3款卓越的 .NET 开源搜索组件库,希望可以帮助到有需要的同学. Elasticsearch .NET El ...

  9. 教你一招,测试人员如何通过AI提高工作效率!

    伴随着AI技术的兴起,像OpenAI推出的ChatGPT.Microsoft发布的Microsoft 365 Copilot.阿里的通义千问.百度的文心一言.华为的盘古大模型等.很多测试人员开始担心, ...

  10. SpringBoot——更换Tomcat服务器为 Jetty 服务器

    Jetty服务器(可能会用到) Jetty 比 Tomcat更轻量级,可拓展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty 首先要启动Jetty服务器  -->  ...