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;
}