HDU 1222 Wolf and Rabbit(数论)

题目链接

题目大意

  有一座山旁边为N个山洞连成环形,编号为0,1,2,3,4,...n-1一头兔子和一只狼来到了这座山上.为了防止被狼捉到,兔子需要藏进某个洞里 ,狼第一次进入编号为0的洞口,然后每次只能前进m个洞口,例如m=2,n=6,则狼将进入0,2,4,0,2,4....所以兔子只需躲在编号为1 3 5 的洞里即可逃生。

解题思路

  当n与m互质的时候,狼肯定能访问到每个洞,负责不能。
  证明:当n与m互质的时候,如果需要走到0号洞,那么就必须走lcm(n,m)步,又因为有n个洞,所以必需要走\(n\times m\)步,那么就需要gcd(n,m)=1才能使\(lcm(n,m)=n\times m\)。但是还漏了一点,虽然走了n个洞,但是怎么证明每个洞都不一样呢?之前说了,lcm(n,m)是最小的循环节,如果在这个循环节中出现了两个相同的数,说明这两个数之间的数再加上两个中的一个是一个更小的循环节,与之前的结论矛盾了,所以说当gcd(n,m)=1的时候走过\(n\times m\)步一共能走过n个不同的洞。

代码

const int maxn = 2e3+10;
const int maxm = 1e4+10;
int main() {
    int t; cin >> t;
    while(t--) {
        ll a, b; cin >> a >> b;
        if (__gcd(a,b)==1) cout << "NO" << endl;
        else cout << "YES" << endl;
    }
    return 0;  
}
posted @ 2020-09-15 17:51  shuitiangong  阅读(122)  评论(0编辑  收藏  举报