Logo lxn 的博客

博客

P8807 [蓝桥杯 2022 国 C] 取模

...
lxn
2025-12-01 12:57:43

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2022-11-08 09:37:57

要求不同的$x,y$:使得:$ n\% x=n \% y$。也就是$n-c=ax=by=x*y$; 也可以表示为$n \%x=c$,是否存在不同的$x$使得$n\%x=c$成立 我们枚举$x$和$c$的所有可能性 $$ n \quad mod \quad x= \begin{cases} 0,\quad x=1\ 0,1, \quad x=2\ 0,1,2 \quad x=3\ 0,1,2...m-1 \quad x=m \end{cases} $$ 假设只有唯一的x使得上面的式子成立。 因为$n\%1=0$,所以$n\%2$只能$=1$ 同理:要只有唯一的解,方程只能为: $$

\begin{cases} n\%2=1\ n\%3=2\ n\%4=3\ ...\ n\%m=m-1 \end{cases} $$ 那这样的n有多少个呢?根据扩展中国剩余定理$n=lcm(2,3,..m)-1$有唯一解。 根据题目的数据范围,m只有再较小的情况下才可能成立,经过计算,$m<=13$

因此,只需要判断$n\%i=i-1$的情况即可。

#include<bits\/stdc++.h>
typedef long long ll;
using namespace std;
ll n,m;
bool work(){
	scanf("%lld%lld",&n,&m);
\/\/	if(m*(m-1)<n-m+2)return 0;
	if(m>13)m=13;

	for(int k=2;k<=m;k++){
		if(n%k!=k-1)return 1;
	}
	return 0;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		if(work())puts("Yes");
		else puts("No");
	}
	
} 

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。