Wolf and Rabbit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4294 Accepted Submission(s): 2155
Problem Description
There is a hill with n holes around. The holes are signed from 0 to n-1.
A rabbit must hide in one of the holes. A wolf searches the rabbit in anticlockwise order. The first hole he get into is the one signed with 0. Then he will get into the hole every m holes. For example, m=2 and n=6, the wolf will get into the holes which are signed 0,2,4,0. If the rabbit hides in the hole which signed 1,3 or 5, she will survive. So we call these holes the safe holes.
A rabbit must hide in one of the holes. A wolf searches the rabbit in anticlockwise order. The first hole he get into is the one signed with 0. Then he will get into the hole every m holes. For example, m=2 and n=6, the wolf will get into the holes which are signed 0,2,4,0. If the rabbit hides in the hole which signed 1,3 or 5, she will survive. So we call these holes the safe holes.
Input
The input starts with a positive integer P which indicates the number of test cases. Then on the following P lines,each line consists 2 positive integer m and n(0<m,n<2147483648).
Output
For each input m n, if safe holes exist, you should output "YES", else output "NO" in a single line.
Sample Input
2 1 2 2 2
Sample Output
NO YES
Author
weigang Lee
Source
Recommend
Ignatius.L
k1*m%n=p, p的值要求在p里面全部取到,k1是整数,只有m与n互质时,才可以实现所有的都取到,举例子来
说,对于m=6,n=3,k1*6%3可以得到始终为0,那么对于我们的非倍数情况,m=21,n=6,k1*21%6, 则可以知道0 3,
6,9,等各种数据,所以我们知道其实这样我们求出的每一个数都是3的倍数,只有当是互素时,我们才可以真
正实现各个数的差值是1 了,所以判断是否互素就是了嘛
#include<iostream>
#include<cstdio>
using namespace std;
long long gcd(long long a,long long b)
{
if(b == 0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int p;
long long m,n;
scanf("%d",&p);
while(p--)
{
cin>>m>>n;
if(gcd(m,n)==1)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}