Reverse Card (Hard Version)

news/2024/10/15 16:20:49

事情是这样的,我验了这一场 CF。显然我玩原神玩多了有一个很奇怪的、不能过的算法,哦,当然,在我本机可以过。为了展现自己的智慧糖,我写一下。

出题人是先发给我了一个限制都是 \(n\) 的,因此只有这个。\(n,m\) 改改就是了。

要求 \(1\le a\le n,1\le b\le n\) 满足

  • \(a+b\mid b\times \gcd(a,b)\) 的个数。

\[a+b\mid b\times \gcd(a,b)\Leftrightarrow \frac{a+b}{\gcd(a,b)}\mid b \]

\(a=p_ag,b=p_bg\),其中 \(g=\gcd(a,b)\)。则

\[\Leftrightarrow p_a+p_b\mid gp_b \]

\[k(p_a+p_b)=gp_b\implies kp_a=(g-k)p_b \]

因为 \(p_a,p_b\) 互质,则 \(k=\alpha p_b,g-k=\alpha p_a\),则 \(g=\alpha(p_a+p_b)\)

\[\Leftrightarrow p_a+p_b\mid g \Leftrightarrow \frac{a+b}{\gcd(a,b)}\mid \gcd(a,b) \]

所以可以枚举 \(\gcd(a,b)=g\),我们就要求 \(p_a,p_b\in \mathbb{N}^+\) 满足

  • \(p_a+p_b-\lfloor \frac{n}{\gcd(a,b)}\rfloor \le p_a,pb\le \lfloor \frac{n}{\gcd(a,b)}\rfloor\)
  • \(\gcd(p_a,p_b)=1\)

我们枚举 \(p_a+p_b\) 的值是什么,\(\mathcal{O}(n\ln n)\)。则我们要求:

\(l=p_a+p_b,s=l-\lfloor \frac{n}{\gcd(a,b)}\rfloor,t=\min(\frac{n}{\gcd(a,b)},l-1)\)

\[\begin{aligned} &\sum_{p_a=s,p_b=l-p_1}^{p_a\sim t} [\gcd(p_a,p_b)=1] \\ =& \ \sum_{p_a=s}^t \sum_{d\mid \gcd(p_a,l-p_a)}\mu(d) \\ =& \ \sum_{d} \mu(d) \sum_{p_a=s}^t [d\mid p_a][d\mid l-p_a] \\ =& \ \sum_{d} \mu(d) \sum_{p_a=s}^t [d\mid p_a][d\mid l]\\ =& \ \sum_{d\mid l} \mu(d) \sum_{p_a=s}^t [d\mid p_a] \\ =& \ \sum_{d\mid l} \mu(d) (\lfloor \frac{t}{d} \rfloor-\lfloor \frac{s-1}{d} \rfloor) \\ \end{aligned} \]

这个我们枚举 \(d\) 就可以了。时间复杂度 \(\mathcal{O}(n\ln\ln n)\)

鉴定为最近学莫比乌斯函数被魔怔了。以下是 \(n,n\) 的 code:

#include <bits/stdc++.h>using namespace std;using ll = long long;const int N = 1e6+6;ll pr[N],cnt,mu[N],vis[N];
vector<int> fac[N];
void init(){mu[1]=1;for (int i=1; i<N; i++){for (int j=i; j<N; j+=i){fac[j].push_back(i);}}for (int i=2; i<N; i++){if (!vis[i]){mu[i]=-1;pr[++cnt]=i;}for (int j=1; j<=cnt && i*pr[j]<N; j++){vis[i*pr[j]]=1;if (i%pr[j]==0){break;}else{mu[i*pr[j]]=-mu[i];}}}
}ll n,p;int main(){ios::sync_with_stdio(false);cin.tie(0);init();cin>>n>>p;ll ans=0;for (int gc=1; gc<=n; gc++){// (a+b)/gc | gcfor (auto u : fac[gc]){if (u==gc){continue;}int s=n/gc;// 1<=pa,pb<=s// gcd(pa,pb)=1int l=gc/u;// pa+pb=ls=min(s,l-1);int ss=l-s;if (s*2<l){continue;}for (auto v : fac[l]){ans+=mu[v]*((ll)(s/v)-(ll)((ss-1)/v));}}}cout<<ans%p<<"\n";return 0;
}

哦这只能说明我数学不好。为了防止大家被魔怔,我贴一个出题人发我的正解。

image

其实有一定的相同,就是后面的枚举不同。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

IDEA在运行maven打war的时候报错:Cannot access defaults field of Properties

问题描述:解决方案 在pom.xml文件中引入:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1</version></plugin></plugins>…

重链剖分题目选讲

染色 给定一棵 \(n\) 个节点的无根树,共有 \(m\) 个操作,操作分为两种:将节点 \(a\) 到节点 \(b\) 的路径上的所有点(包括 \(a\) 和 \(b\))都染成颜色 \(c\)。 询问节点 \(a\) 到节点 \(b\) 的路径上的颜色段数量。颜色段的定义是极长的连续相同颜色被认为是一段。例如 1…

轻松使用Aspire rabbitmq framework

轻松使用aspire rabbitmq 创作初衷 aspire 是微软基金会推出的新一代云原生编排框架,具体请看 https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview 我从preview1 - preview6(目前最新 2024/5/1) 一直都有使用,在第一版的时候我就用它放入了我的…

leetcode算法热题--盛最多水的容器

题目 给定一个长度为n的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例 1:输入:[1,8,6,2,5,4,8,3,7] 输…

在身份认证后建立用户对象ICurrentUser

app.UseAuthentication(); 这个中间件添加后,他会为HttpContext.User设置一个ClaimsPrincipal对象。里面有身份认证token里面携带的信息。 其访问方式如下HttpContext.User.FindFirstValue("自定义字段")我们可以创建一个服务,方便在应用中使用用户信息。 因为在服…

CMake极速入门

快速上手基本的CMake引言 还在手写晦涩难懂的Makefile文件吗?现如今,主流的c++项目都采取CMake作为项目构建工具,CMake可以跨平台运行,而且语法相对Makefile而言直观很多,是时候将Makefile扫进垃圾堆了。 Hello, World! 首先先以单个源文件项目为讲解,新建一个main.cpp文…

《Node.js+Vue.js+MangoDB全栈开发实战》已出版

《Node.js+Vue.js+MangoDB全栈开发实战》 随书源码下载地址: 链接:https://pan.baidu.com/s/1DQYgPZLmtJCIuDXs8gub_w?pwd=1127 提取码:1127 课件下载地址: 链接:https://pan.baidu.com/s/1M36y1xu-gIUidDxw38GlBg 提取码:1988 随书目录 目 录 第1章 Node.js和TypeS…

for reading (没有那个文件或目录)en file `

001、奇怪的报错: for reading (没有那个文件或目录)en file `[sy20223040796@admin1 test]$ ls ## 测试文件及命令 test.bed test.sh [sy20223040796@admin1 test]$ cat test.bed ## 测试文件 1 5400001 5400002 1 5425001 5425002 1 …