1-Codeforces Round 1091 (Div. 2) and CodeCraft 26题解

1275 字
6 分钟
1-Codeforces Round 1091 (Div. 2) and CodeCraft 26题解

Prakul has been working hard setting problems for Codecraft. When he’s deep in thought, he likes jumping around his room in weird but specific ways. After some time, he wonders if jumping in this manner can cover all the tiles of his room.

Prakul’s room can be considered as a grid AA consisting of nn rows and mm columns. He starts walking from A1,1A_{1,1}. If he is currently at Ai,jA_{i,j} he can do either of the following moves:

  • Jump bb steps right to Ai,  ((j+b1)modm)+1A_{\,i,\;((j+b-1)\bmod m)+1}, or
  • Jump aa steps down to A((i+a1)modn)+1,  jA_{\,((i+a-1)\bmod n)+1,\;j}.

A special restriction is that he can start with either move, but must alternate between them.

Note that his room is quite special as it wraps around itself. Moving one step right from the mm-th column places him in the 11-st column. Similarly, moving one step down from the nn-th row places him in the 11-st row.

Since he still has to work on problemsetting, he needs your help. Determine if he can visit all tiles in AA in a finite number of jumps.

Input

Each test contains multiple test cases. The first line contains the number of test cases tt (1t1041 \le t \le 10^4). The description of the test cases follows.

The only line of each test case contains four integers n,m,a,bn, m, a, b (1n,m,a,b1091 \leq n, m, a, b\leq 10^{9}).

Output

For each test case, print “YES” if Prakul can cover all the tiles of his room, and “NO” otherwise.

You can output the answer in any case (upper or lower). For example, the strings “yEs”, “yes”, “Yes”, and “YES” will be recognized as positive responses.

等价于

k,(ka mod n,kb mod m)((k+1)a mod n,kb mod b)\forall k,(ka \space mod \space n, kb \space mod \space m)和((k + 1)a \space mod \space n, kb \space mod \space b)

是否能遍历到[0,n1]×[0,m1][0, n - 1]\times[0,m-1]的所有点

由于((k+1)a mod n,kb mod b)((k + 1)a \space mod \space n, kb \space mod \space b)可看作(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)的平移,首先讨论(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)的情况

(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)#

(ka mod n)(kb mod m)(ka \space mod \space n)和(kb \space mod \space m)基本一样,不妨讨论ka mod nka \space mod \space n的情况

1. ka mod nka \space mod \space n#

只需讨论k[0,n1]\forall k \in [0, n - 1]的情况,由带余除法性质可知,其他范围皆可通过平移归约到此情况,形式化地解释如下

k,q,r[0,n1](n的标准完全剩余系)s.t.k=qn+r\forall k, \exists q,r\in[0, n-1](\text{即}n\text{的标准完全剩余系})\quad s.t. \quad k=q\cdot n + r

故有

ka mod n=ra mod nka \space mod \space n = ra \space mod \space n

k=rk = r则有

k[0,n1],ka mod n\forall k \in [0, n-1],ka \space mod \space n

要使动点能随kk变化遍历所有点,则k[0,n1],ka mod n\forall k \in [0, n-1],ka \space mod \space n要能够表示所有行即[0,n1][0, n-1],即nn的完全剩余系

要满足这个条件,则kaka要两两不同余

  1. n=1n=1时,能表示0即所有行,满足条件且gcd(a,n)=1gcd(a, n)=1

  2. n>1n>1

    k1>k2[0,n1]\forall k_1 > k_2 \in[0,n-1]

    对于公式

    k1ak2a(k1k2)a(modn)k_1a-k_2a\equiv (k_1-k_2)a\pmod{n}

    0<k1k2<n0<k_1-k_2 < n

    1. gcd(a,n)=1gcd(a, n) = 1

      假设

      (k1k2)a0(modn)(k_1-k_2)a\equiv 0\pmod{n}

      由于gcd(a,n)=1gcd(a, n) = 1,故aa可逆,故有

      (k1k2)a0k1k20(modn)(k_1-k_2)a\equiv 0\Leftrightarrow k_1-k_2\equiv0\pmod{n}

      由完全剩余系的性质可知当且仅当两者相等时才同余,故得

      k1=k2k_1=k_2

      与条件k1>k2k1 > k_2矛盾,故有结论

      k1k2[0,n1],k1a≢k2a(modn)\forall k_1 \ne k_2 \in[0,n-1],k_1a\not\equiv k_2a \pmod{n}

      k[0,n1],ka mod n\forall k \in [0, n-1],ka \space mod \space n两两不同行,又总数有nn个行,故其是nn的完全剩余系,能表示所有行

    2. gcd(a,n)1gcd(a, n)\ne1

      d=gcd(a,n)>1d=gcd(a,n) > 1,有

      0<nd<n0<\frac{n}{d} < n

      故令k1k2=ndk_1-k_2=\frac{n}{d},则此时有

      (k1k2)anagcd(n,a)lcm(n,a)0(modn)(k_1-k_2)a\equiv \frac{na}{gcd(n,a)}\equiv lcm(n,a)\equiv0\pmod{n}

      故有结论,此时[0,n1][0, n-1]会有nd\frac{n}{d}及其倍数使行重复,又总数只有nn个行,故能表示的行<n<n,不满足条件

故当且仅当gcd(a,n)=1gcd(a,n)=1ka mod nka \space mod \space n能表示所有行

2. kb mod nkb \space mod \space n#

同理可得当且仅当gcd(b,m)=1gcd(b,m)=1kb mod nkb \space mod \space n能表示所有列

3. (ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)#

即使各自能表示所有行,表示所有列,在遍历kk的过程中动点仍有可能重复

考虑(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)重复的情况,只有

k1>k2,{k1ak2a(modn)k1bk2b(modm)gcd(a,n)=1,gcd(b,m)=1k1k2>0,{k1k20(modn)k1k20(modm)\forall k_1 > k_2, \begin{cases} k_1a\equiv k_2a \pmod{n} \\ k_1b\equiv k_2b \pmod{m} \end{cases} \overset{gcd(a,n)=1,gcd(b,m)=1}\Leftrightarrow \forall k_1 - k_2 > 0, \begin{cases} k_1-k_2\equiv 0 \pmod{n} \\ k_1-k_2\equiv 0 \pmod{m} \end{cases}

t=k1k2t=k_1-k_2对于

{t0(modn)t0(modm)\begin{cases} t\equiv 0 \pmod{n} \\ t\equiv 0 \pmod{m} \end{cases}

扩展欧几里得定理解得

t0(modlcm(n,m))k1k2(modlcm(n,m))t\equiv0 \pmod{lcm(n,m)}\Leftrightarrow k_1\equiv k_2 \pmod{lcm(n,m)}

由于

k,k=qlcm(n,m)+r,0r<lcm(n,m)\forall k,k=q\cdot lcm(n,m)+r,0\le r < lcm(n,m)

kk可归约为[0,lcm(n,m)1][0,lcm(n,m)-1]lcm(n,m)lcm(n,m)的完全剩余系,其余点总能在完全剩余系中找到等价的点,而完全剩余系中的点模lcm(n,m)lcm(n,m)不同余,故为不同点,总计有lcm(n,m)lcm(n,m)个不同点,可简单的解释为k(ka mod n,kb mod m)k\rightarrow(ka\space mod \space n, kb\space mod \space m)的映射以lcm(n,m)lcm(n,m)为最小周期,即当kk[0,lcm(n,m)1][0, lcm(n,m)-1]取值时恰好遍历所有不同点,故共有lcm(n,m)lcm(n,m)个不同点

4. ((k+1)a mod n,kb mod b)((k + 1)a \space mod \space n, kb \space mod \space b)#

由于((k+1)a mod n,kb mod b)((k + 1)a \space mod \space n, kb \space mod \space b)可看作(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)的平移,故也能遍历总计有lcm(n,m)lcm(n,m)个不同点,那么是否和(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)重复呢?若有重复点,则

{(k1+1)ak2a(modn)k1bk2b(modm)gcd(a,n)=1,gcd(b,m)=1{k1+1k2(modn)k1k2(modm)t=k2k1{t1(modn)t0(modm)\begin{cases} (k_1+1)a\equiv k_2a \pmod{n} \\ k_1b\equiv k_2b \pmod{m} \end{cases} \overset{gcd(a,n)=1,gcd(b,m)=1}\Leftrightarrow \begin{cases} k_1+1\equiv k_2 \pmod{n} \\ k_1\equiv k_2 \pmod{m} \end{cases} \overset{t=k_2-k_1}\Leftrightarrow \begin{cases} t\equiv 1 \pmod{n} \\ t\equiv 0 \pmod{m} \end{cases}

有解,由裴蜀定理得,要使其有解则

10(modgcd(n,m))gcd(n,m)=11 \equiv 0 \pmod{gcd(n,m)} \Leftrightarrow gcd(n,m)=1

其余情况则无解,与(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)无重复

5. Conclusion#

  1. gcd(n,m)=1gcd(n,m)=1

    (ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)能表示lcm(n,m)=gcd(n,m)=1nmlcm(n,m)\overset{gcd(n,m)=1}=nm个点,故能表示[0,n1]×[0,m1][0, n - 1]\times[0,m-1]所有点,满足条件

  2. gcd(n,m)1gcd(n,m)\ne1

    ((k+1)a mod n,kb mod b)((k + 1)a \space mod \space n, kb \space mod \space b)(ka mod n,kb mod m)(ka \space mod \space n, kb \space mod \space m)可表示总共2×lcm(n,m)2\times lcm(n,m)个互不相同的点

    要使其能遍历[0,n1]×[0,m1][0, n - 1]\times[0,m-1]所有点则

    2×lcm(n,m)nmnmlcm(n,m)=gcd(n,m)22\times lcm(n,m) \ge nm \Leftrightarrow \frac{nm}{lcm(n,m)} = gcd(n,m) \le 2

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

1-Codeforces Round 1091 (Div. 2) and CodeCraft 26题解
https://skaco2.com/posts/03-solutions/1-codeforces-round-1091-div-2-and-codecraft-26题解/
作者
SKACO2
发布于
2026-04-09
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
SKACO2
Hello……
公告
欢迎来到我的博客!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
53
分类
8
标签
54
总字数
58,255
运行时长
0
最后活动
0 天前

目录