这个题几个月前做过一次,这次复习下。。
题目大意:有n个洞,编号0到n-1,洞按逆时针排列,一只狼第一次进0号洞,第二次进m%n号洞,第三次进2m%n号洞...
狼永远也不会进入的洞是安全洞,问存不存在安全洞。
以前做这题的时候才知道数论里有个结论,n和m互质的时候所有的洞都可以遍历到,即不存在安全洞,n和m不互质一定有洞遍历不到。
证明:
设可以到达的位置为pos,假定存在整数x,y,使得 m*x + n*y = pos,
(pos必须是gcd(m,n)倍数方程才有解,这个叫裴蜀定理,)
①如果m,n不互质,则gcd(m,n)>1,则pos为1的时候无解。
②如果m,n互质,则gcd(m,n)==1,因为pos=0,1,2...n-1,所以必有解
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int gcd(int a,int b){ //最大公因数
if(b == 0)
return a;
return gcd(b,a%b);
}
int main(){
int t;
scanf("%d",&t);
int n,m;
while(t--){
scanf("%d%d",&n,&m);
int result = gcd(n,m);
if(result == 1){
printf("NO\n");
}else{
printf("YES\n");
}
}
return 0;
}