向量
1.题目
2.分析
有四种操作方式 ( a , b ) , ( a , − b ) , ( b , a ) , ( b , − a ) (a, b), (a, -b), (b, a), (b, -a) (a,b),(a,−b),(b,a),(b,−a)
设第 i i i个方程的操作数量是 A i A_i Ai
∴
A
1
a
+
A
2
a
+
A
3
b
+
A
4
b
=
x
①
∴A_1a + A_2a + A_3b + A_4b = x①
∴A1a+A2a+A3b+A4b=x①
且
A
1
b
−
A
2
b
+
A
3
a
−
A
4
a
=
y
②
且A_1b - A_2b + A_3a - A_4a = y②
且A1b−A2b+A3a−A4a=y②
由
①
+
②
可
得
:
A
1
(
a
−
b
)
+
A
2
(
a
+
b
)
+
A
3
(
b
−
a
)
+
A
4
(
a
+
b
)
=
x
+
y
①+②可得:A_1(a - b) + A_2 (a + b) + A_3 (b - a) + A_4 (a + b) = x + y
①+②可得:A1(a−b)+A2(a+b)+A3(b−a)+A4(a+b)=x+y
即
(
A
2
+
A
4
)
(
a
+
b
)
+
(
A
1
−
A
3
)
(
a
−
b
)
=
x
+
y
(A_2 + A_4) (a + b) + (A_1 - A_3)(a - b) = x + y
(A2+A4)(a+b)+(A1−A3)(a−b)=x+y
由
①
:
(
A
1
+
A
2
)
a
+
(
A
3
+
A
4
)
b
=
x
⇒
(
a
,
b
)
∣
x
①:(A_1 + A_2)a + (A_3 + A_4)b = x \Rightarrow (a, b) \mid x
①:(A1+A2)a+(A3+A4)b=x⇒(a,b)∣x
由
②
:
(
A
1
−
A
2
)
a
+
(
A
3
−
A
4
)
b
=
y
⇒
(
a
,
b
)
∣
y
②:(A_1 - A_2)a + (A_3 - A_4)b = y \Rightarrow (a, b) \mid y
②:(A1−A2)a+(A3−A4)b=y⇒(a,b)∣y
由
③
:
(
a
+
b
,
a
−
b
)
∣
(
x
+
y
)
③:(a + b, a - b) \mid (x + y)
③:(a+b,a−b)∣(x+y)
3.参考代码
#include <cstdio>
#include <iostream>
#define LL long long
using namespace std;
int t;
LL a, b, x, y;
LL gcd (LL x, LL y);
LL Abs (LL x) { return x > 0 ? x : -x; }
int main () {
scanf ("%d", &t);
while (t--) {
scanf ("%lld %lld %lld %lld", &a, &b, &x, &y);
// printf ("x = %d, y = %d\n", x, y);
// printf ("gcd = %d\n", gcd (b - a, gcd (a + b, a)));
int flag1 = x % gcd (a, b), flag2 = y % gcd (a, b), flag3 = (x - y) % gcd (a + b, a - b), flag4 = (x + y) % gcd (a + b, a - b);
if (flag1 || flag2 || flag3 || flag4) {//flag(1~4)随便选3个都能过
printf ("N\n");
}
else {
printf ("Y\n");
}
}
return 0;
}
LL gcd (LL x, LL y) {
if (Abs (x) < Abs (y)) swap (x, y);
if (y == 0) return x;
return gcd (y, x % y);
}
question:
③由①和②推出,为什么会得到不同的结论呢?求助orz