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;
}

浙公网安备 33010602011771号