给出八个基底向量:
(
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)?
显然我们只需加减以下四组基底相邻即可
(
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
要方程组有解,这是两个不定方程,由裴蜀定理,首先需要
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
#include
#include
#include
#include
#include
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;
}