gcd(最大公约数)lcm(最小公倍数)E

时间:2021-01-27 05:17:23

1.gcd

递归实现

int gcd(int i,int j)
{
if(j==0) return i;
else return gcd(j,i%j);
}

2、lcm

int gcd(int i,int j)
{
if(j==0) return i;
else return gcd(j,i%j);
}

int lcm(int i ,int j)

{

return i*j/gcd(i*j);

}

3.

E - Wolf and Rabbit

 兔子坑问题

There is a hill with n holes around. The holes are signed from 0 to n-1. 

gcd(最大公约数)lcm(最小公倍数)E


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. 

InputThe 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). 
OutputFor 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
题目意思:狼抓兔子,输入m,n,狼能进入每相距为m的洞,洞的编号为0——n-1,如果狼每个洞都能进入,兔子就会被吃,问:兔子能不能存活?
如果狼每一个洞都能进去,兔子才会必死无疑,即在剔除m为1,这种特殊情况后,m,n,不能存在倍数关系,那么狼便能进入每一个洞,即他们的最大公约数为1.
#include <iostream>
using namespace std;
int gcd(int i,int j)
{
if(j==0) return i;
else return gcd(j,i%j);
}
int main()
{
long long t,m,n;
cin
>>t;
while(t--)
{
cin
>>m>>n;
if(gcd(m,n)==1)
cout
<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}