题意:
给出八个基底向量:
(
a
,
b
)
,
(
−
a
,
b
)
,
(
a
,
−
b
)
,
(
−
a
,
−
b
)
,
(
b
,
a
)
,
(
−
b
,
a
)
,
(
b
,
−
a
)
,
(
−
b
,
−
a
)
(a,b),(-a,b),(a,-b),(-a,-b),(b,a),(-b,a),(b,-a),(-b,-a)
(a,b),(−a,b),(a,−b),(−a,−b),(b,a),(−b,a),(b,−a),(−b,−a)
问能否通过若干个上述向量相加得到相邻
(
x
,
y
)
(x,y)
(x,y)?
Solution:
显然我们只需加减以下四组基底相邻即可
(
a
,
b
)
,
(
−
a
,
b
)
,
(
b
,
a
)
,
(
−
b
,
a
)
(a,b),(-a,b),(b,a),(-b,a)
(a,b),(−a,b),(b,a),(−b,a)
不妨设他们分别被算数增加了
k
i
k_{i}
ki次,
k
i
∈
Z
k_{i}\in Z
ki∈Z,于是需要下列方程组有解
k
1
(
a
,
b
)
+
k
2
(
−
a
,
b
)
+
k
3
(
b
,
a
)
+
k
4
(
−
b
,
a
)
=
(
x
,
y
)
k_{1}(a,b)+k_{2}(-a,b)+k_{3}(b,a)+k_{4}(-b,a)=(x,y)
k1(a,b)+k2(−a,b)+k3(b,a)+k4(−b,a)=(x,y)
即
{
(
k
1
−
k
2
)
a
+
(
k
3
−
k
4
)
b
=
x
(
k
1
+
k
2
)
a
+
(
k
3
+
k
4
)
b
=
y
\begin{cases} (k_{1}-k_{2})a+(k_{3}-k_{4})b=x \\ (k_{1}+k_{2})a+(k_{3}+k_{4})b=y \end{cases}
{(k1−k2)a+(k3−k4)b=x(k1+k2)a+(k3+k4)b=y
要方程组有解,这是两个不定方程,由裴蜀定理,首先需要
g
c
d
(
k
1
−
k
2
,
k
3
−
k
4
)
∣
x
g
c
d
(
k
1
+
k
2
,
k
3
+
k
4
)
∣
y
gcd(k_{1}-k_{2},k_{3}-k_{4})|x\\ gcd(k_{1}+k_{2},k_{3}+k_{4})|y
gcd(k1−k2,k3−k4)∣xgcd(k1+k2,k3+k4)∣y
然后这样只保证了存在
(
k
1
−
k
2
)
,
(
k
1
+
k
2
)
,
(
k
3
−
k
4
)
,
(
k
3
+
k
4
)
(k_{1}-k_{2}),(k_{1}+k_{2}),(k_{3}-k_{4}),(k_{3}+k_{4})
(k1−k2),(k1+k2),(k3−k4),(k3+k4),我们的目的是使
k
i
k_{i}
ki有正整数解,此时我们可以这样解出
k
1
k_{1}
k1
k
1
=
(
k
1
−
k
2
)
+
(
k
1
+
k
2
)
2
k_{1}=\frac{(k_{1}-k_{2})+(k_{1}+k_{2})}{2}
k1=2(k1−k2)+(k1+k2)
要使
k
1
k_{1}
k1是正整数,那么必须要分子为偶数,于是
(
k
1
+
k
2
)
(k_{1}+k_{2})
(k1+k2)与
(
k
1
−
k
2
)
(k_{1}-k_{2})
(k1−k2)奇偶性必须相同,同理对后两项也是的,接下来枚举他们的奇偶性:
-
若 ( k 1 − k 2 ) (k_{1}-k_{2}) (k1−k2)为偶数, ( k 3 − k 4 ) (k_{3}-k_{4}) (k3−k4)为偶数,那么方程组的 ( 1 ) (1) (1)式就可以写作
2 [ ( k 1 − k 2 ) a + ( k 3 − k 4 ) b ] = x ⇒ ( k 1 − k 2 ) ( 2 a ) + ( k 3 − k 4 ) ( 2 b ) = x 2[(k_{1}-k_{2})a+(k_{3}-k_{4})b]=x\Rightarrow(k_{1}-k_{2})(2a)+(k_{3}-k_{4})(2b)=x 2[(k1−k2)a+(k3−k4)b]=x⇒(k1−k2)(2a)+(k3−k4)(2b)=x
此时只需要上述方程有解,就可以保证解出来的 ( k 1 − k 2 ) (k_{1}-k_{2}) (k1−k2)为偶数了,即只需要
g c d ( 2 a , 2 b ) ∣ x gcd(2a,2b)|x gcd(2a,2b)∣x
同理可得
g c d ( 2 a , 2 b ) ∣ y gcd(2a,2b)|y gcd(2a,2b)∣y -
若 ( k 1 − k 2 ) (k_{1}-k_{2}) (k1−k2)为偶数, ( k 3 − k 4 ) (k_{3}-k_{4}) (k3−k4)为奇数,只需要左右两边 + b +b +b,得到
( k 1 − k 2 ) a + ( k 3 − k 4 + 1 ) b = x + b (k_{1}-k_{2})a+(k_{3}-k_{4}+1)b=x+b (k1−k2)a+(k3−k4+1)b=x+b
这就转化为都是偶数的情形了,同上只需要
g c d ( 2 a , 2 b ) ∣ ( x + b ) , g c d ( 2 a , 2 b ) ∣ ( y + a ) gcd(2a,2b)|(x+b),gcd(2a,2b)|(y+a) gcd(2a,2b)∣(x+b),gcd(2a,2b)∣(y+a)下面两种情况同理,直接给出结论
-
若 ( k 1 − k 2 ) (k_{1}-k_{2}) (k1−k2)为奇数, ( k 3 − k 4 ) (k_{3}-k_{4}) (k3−k4)为偶数,只需要
g c d ( 2 a , 2 b ) ∣ ( x + a ) , g c d ( 2 a , 2 b ) ∣ ( y + b ) gcd(2a,2b)|(x+a),gcd(2a,2b)|(y+b) gcd(2a,2b)∣(x+a),gcd(2a,2b)∣(y+b) -
若 ( k 1 − k 2 ) (k_{1}-k_{2}) (k1−k2)为奇数, ( k 3 − k 4 ) (k_{3}-k_{4}) (k3−k4)为奇数,只需要
g c d ( 2 a , 2 b ) ∣ ( x + a + b ) , g c d ( 2 a , 2 b ) ∣ ( y + a + b ) gcd(2a,2b)|(x+a+b),gcd(2a,2b)|(y+a+b) gcd(2a,2b)∣(x+a+b),gcd(2a,2b)∣(y+a+b)
上述四种情况满足一个即代表有解,并且上面每一种都包含最开始的裴蜀定理的条件,就无需再验证裴蜀定理了
// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<numeric>
#include<ctime>
using namespace std;
using ll=long long;
const int N=25,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=1e9+7;
template<class T>
T gcd(T a,T b){
return !b?a:gcd(b,a%b);
}
ll tmp;
bool check(ll x,ll y){return x%tmp==0&&y%tmp==0;}
int main()
{
#ifdef stdjudge
freopen("in.txt","r",stdin);
#endif
int t; cin>>t;
while(t--)
{
ll a,b,x,y; cin>>a>>b>>x>>y;
tmp=gcd(a,b)<<1;
if(check(x,y)||check(x+b,y+a)||check(x+a,y+b)||check(x+a+b,y+a+b)) printf("Y\n");
else printf("N\n");
}
return 0;
}