1285.狼和兔子 SDNUOJ 1285

Description
在一个山腰上有n个洞,洞从0~n-1编号并围成个圈。一只兔子藏在了其中一个洞里。一只狼逆时针顺序搜索兔子,从第0个洞进入,然后进入后边每m个洞里。例如:m=2,n=6,这只狼就要分别进第0 2 4 0个洞。如果兔子藏在1或3或5号洞里它就可以存活下来,我们称这些洞是安全的。
Input
第一行一个P,P表示测试用例的数目
下边跟着P行,每行有2个正整数m和n(0<m,n<2147483648).

Output
对于每对m,n输出一行,如果有洞是安全的,输出“YES”,否则输出“NO”。
Sample Input
2
1 2
2 2
Sample Output
NO
YES

假设有n=6个洞 0 1 2 3 4 5 
当m=4时,狼进的洞是0 4 2 0,也就是形成了一个循环,永远也到不了其他洞穴
当m=5时,狼进的洞是0 5 4 3 2 1 0,这时所有的洞都遍历了一遍
当m=4和m=5时,到底有什么区别?
当n和m有公约数(非1)时,就会形成一个数字个数小于n的循环
当n和m无公约数时,就会形成一个数字个数为n的循环,此时没有安全洞穴
题就转化成了判断两个数是否有公约数

#include <iostream>
using namespace std;

int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b, a % b);
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int m, n;
        cin >> m >> n;
        if(gcd(m, n) == 1)
            cout << "NO" << '\n';
        else
            cout << "YES" << '\n';
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaobaole2018/article/details/85345515