题目链接:Wolf and Rabbit
题目大意:n个洞逆时针方向,狼每走一步要垮m个洞,即0,m,2m...这样走,循环走,如果总有洞是走不到的输出YES,反之输出NO。
分析:
假设狼一共走了x步,那么狼所在洞的编号为
k=(x*m)%n (1)
如果所有的洞都能走到,那么k可以取遍0,1,2,...,n-1
(1)式等价于
xm-ny=k (2)
根据扩展欧几里得,当且仅当 gcd(m,n) | k时方程有解
而k要取遍0,1,2,...,n-1,那么gcd(m,n)只能为1
#include <stdio.h>
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
int main()
{
//freopen("in.txt","r",stdin);
int m,n,T;
scanf("%d",&T);
while(T--){
scanf("%d %d",&m,&n);
if(gcd(m,n)==1)printf("NO\n");
else printf("YES\n");
}
return 0;
}