首页 > 其他分享 >Reverse Card (Hard Version)

Reverse Card (Hard Version)

时间:2024-05-01 11:33:31浏览次数:25  
标签:le frac Reverse sum Hard mid mu Version gcd

事情是这样的,我验了这一场 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 | gc
		for (auto u : fac[gc]){
			if (u==gc){
				continue;
			}
			int s=n/gc;
			// 1<=pa,pb<=s
			// gcd(pa,pb)=1
			int l=gc/u;
			// pa+pb=l
			s=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

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

标签:le,frac,Reverse,sum,Hard,mid,mu,Version,gcd
From: https://www.cnblogs.com/SFlyer/p/18169126

相关文章

  • ES Validation Failed: 1: this action would add [1] shards, but this cluster c
    [2024-05-01T08:56:52,606][ERROR][o.e.x.i.IndexLifecycleRunner][tools]policy[ilm-history-ilm-policy]forindex[.ds-ilm-history-5-2024.03.28-000001]failedonstep[{"phase":"hot","action":"rollover","name&qu......
  • Intel Pentium III CPU(Coppermine, Tualatin) L2 Cache Latency, Hardware Prefetch
    这几天,偶然的机会想到了困扰自己和其他网友多年的IntelPentiumIII系列处理器缓存延迟(L2CacheLatency),以及图拉丁核心版本是否支持硬件预取(HardwarePrefetch)问题。手头的支持图拉丁核心处理器的i815主板还在正常服役中,铜矿和图拉丁核心处理器也都有,所以就专门做了这一期调查,感......
  • Installation requirements for SAP Kernels on Windows (C++ runtime environment, V
      Symptom在Windows执行StartSAP,报错信息找不到指定的模块:"Theprogramcan'tstartbecausemsvcr100.dllismissingfromyourcomputer.""无法启动此程序,因为计算机中丢失了msvcr100.dll。尝试重新安装该程序以解决此问题。" OtherTermsC,C++,runtime,VCred......
  • AssemblyResolve巧解未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0的问题
    问题:未能加载文件或程序集“Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个...问题分析:原因是因为引用的Microsoft.AspNet.SignalR.Client库的依赖项是6.0版本的Newtonsoft.Json,而且是动态加载进去的(用Assembly.LoadFrom),......
  • CH58x芯片Hardfault问题排查
    前言:针对RISC-V芯片进入HardFault_Handler函数的问题排查提供讲解。一、HardFault函数添加PC指针打印在公共文件的sys.c函数中找到函数并修改如下:__INTERRUPT__HIGH_CODE__attribute__((weak))voidHardFault_Handler(void){uint32_tv_mepc,v_mcause,v_mtval;p......
  • node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found问题解决方案
    问题centos7服务器使用nvm或n安装的16以后的高版本node,均会出现以下问题解决1.升级gcc与make#升级GCC(默认为4升级为8)yuminstall-ycentos-release-sclyuminstall-ydevtoolset-8-gcc*ln-s/opt/rh/devtoolset-8/root/bin/gcc/usr/bin/gccln-s/opt/rh/devtool......
  • Sharding-JDBC测试ChatGPT
    问题:Sharding-JDBC对订单表进行分库分表,16个库,每个库16张表。分片键订单id、用户id。分库规则,对分片键按1000取模再对16取模。分表规则,对分片键按1000取模再对256取模。配置文件如何写,以及ComplexKeysShardingAlgorithm实现代码? 回答:针对订单表进行分库分表,每个库16张表,分片......
  • CF1209E2 Rotate Columns (hard version)
    题意:题目分析:首先我们看看数据范围:\(n<=12\)这很显然是一个十分小的一个范围,提示我们可以使用各种怪解时间复杂度较大的解法去做。先不考虑\(m\)的数据范围,我们可以很显然的想出一个状压dp:设\(f[i][s]\)考虑到第\(i\)列时,是行状态为\(s\)(就是考虑哪些行计入答案)......
  • 推荐一个使用 HardLink 硬链接减少重复文件占用磁盘空间的工具
    在NTFS文件系统里面,咱可以使用HardLink硬链接的方式,将多个重复的文件链接到磁盘的同一份记录里面,从而减少在磁盘里面对重复文件存储多份记录,减少磁盘空间的占用。本文将和大家推荐我所做的基于HardLink硬链接减少重复文件占用磁盘空间的工具此工具名为UsingHardLinkToZipN......
  • dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commi
    我在一个WPF项目里面,在界面显示应用的版本号,更新到dotnet8的SDK之后,发现我的界面布局损坏了。本质上这个破坏性改动和WPF没有什么关系,是dotnet的SDK或编译器的破坏性变更,在AssemblyInformationalVersionAttribute的InformationalVersion属性里面写入了当前的git......