题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1222
当m和n互质的时候,wolf可以走过所有的洞。
因为当以步数为m来数n个数的时候,数过一周以后,偏移量是n%m,于是新的起点是n%m,要数到所有的数字,就必须把1-m区间当中的数都数到,没数过一周,在1-m这个区间内,前进的步数都是n%m,因此可以进一步描述问题,在1-m这个区间之内,每次前进n%m次,能否将所有的点都数过,于是n=m,m=n%m,直到最后m=1,这样所有的点都会被数过,这便是最大公约数的问题。
#include<iostream> #include<cstdio> using namespace std; int gcd(int a,int b){ while(a%b!=0){ int r = a%b; a=b; b=r; } return b; } int main(){ int p; scanf("%d",&p); while(p--){ int m,n; scanf("%d %d",&m,&n); if(gcd(m,n)==1){ printf("NO "); }else{ printf("YES "); } } return 0; }