Cfz Round 3-Change

题目

所需知识

\(裴蜀定理\)::若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。

它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1.
也就是说 如果p是质数,则他们的最大公因数必为b,对于他们的%运算而言p以下的数除了0都能找到

17 4

4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 0

感觉很神奇,这个gcd就是和倍数有关吧,

17 5

5 10 15 3 8 13 1 6 11 16 4 9 14 2 7 12 0

对于该定理为什么能证明出p以下的数除了0都能找到
有佬给了我答案,


ax+by=1,其实就是bx-kp=c,对于\(ax≡c(mol y )\)是可以写成ax-by=c的;

就是bx-kp=c,为什么呢?我们不妨展开

[[(x+b)%p]+b]%p.....

不就是加了x个b后满足减一次p变成xb-p=c,如果这个c不是答案,继续展开做下去

最终变成 \(∃b-∃p=c\) ,就是bx-kp=c,类似定理的ax+by=d,其实gcd(a,b)=d=1,a,b,互质 c肯定是1的倍数.

这是我赛时代码

#include <iostream>
using namespace std;
int p, a, b, c;
bool flag;

void solve() {
	cin >> p >> a >> b >> c;
	if (p <= c) {
		cout << "NO" << endl;
		return ;
	}
	if(b==0){
		cout << "NO" << endl;
		return ;
	}
	if(c%2==1)
	{
		if(p%2==1||a%2==1||b%2==1)	{cout << "YES" << endl;return;}
		
	}
	if(c%2==0)
	{
		if(p%2==0||a%2==0||b%2==0)	{cout << "YES" << endl;return;}
		
	}
	
	cout<<"NO"<<endl;
	return ;
}
int main() {
	int t;
	cin >> t;
	while (t--)solve();



	return 0;
}

正确就是b!=0就行了 注意c0b0也行

#include <iostream>
using namespace std;
int p, a, b, c;

void solve() {
	cin >> p >> a >> b >> c;

if(b!=0)cout<<"YES"<<endl;
else if(b==0&&c==0)cout<<"YES"<<endl;
	
else cout<<"NO"<<endl;

	return ;
}
int main() {
	int t;
	cin >> t;
	while (t--)solve();



	return 0;
}
posted @ 2025-04-16 20:27  LteShuai  阅读(24)  评论(0)    收藏  举报