题解 |

Gcd

https://ac.nowcoder.com/acm/contest/57360/G

和高等代数有关

注意事项

  • 集合中没有重复的元素。
  • 要特判 00 初始在集合中的情况

结论在 zzzyx0y0z \ne z \land z\ne y \land x \ne 0 \land y\ne 0 , 的情况下 可以通过一些操作使 zz 在集合中出现

的充要条件是 zmodgcd(x,y)=0z \bmod \gcd(x,y) = 0

证明如下:

d=gcd(x,y)d = gcd(x,y) 一定存在正整数 k1,k2k1, k2 使得 x=k1×d,y=k2×dx = k1 \times d, y = k2\times d

可以通过一次操作使得集合中存在 dd,从而 d,2d,3d,..max(k1,k2)×dd, 2d, 3d,..\max(k1,k2)\times d

存在集合中。由于 xyx \ne y 从而 d,2dd, 2d 一定可以存在集合中,从而可以把d-d

加入集合。由于 zmodd=0z \bmod d = 0, 可以设 z=k3×dz = k3\times d。 故可能通过若干操作使得

zz 出现在集合中。

void solve(){
    int x, y, z;
    cin >> x >> y >> z;
    int d = __gcd(x, y);
    if (x == z || y == z) {
        cout << "YES\n";
        return;
    }
    if (x == 0 || y == 0 || z == 0) {
        cout << "NO\n";
        return;
    }
    if (z % d == 0) cout << "YES\n";
    else cout << "NO\n";
}


全部评论

相关推荐

评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务