原题:
Problem Description
The Children’s Day has passed for some days .Has you remembered something happened at your childhood? I remembered I often played a game called hide handkerchief with my friends.
Now I introduce the game to you. Suppose there are N people played the game ,who sit on the ground forming a circle ,everyone owns a box behind them .Also there is a beautiful handkerchief hid in a box which is one of the boxes . Then Haha(a friend of mine) is called to find the handkerchief. But he has a strange habit. Each time he will search the next box which is separated by M-1 boxes from the current box. For example, there are three boxes named A,B,C, and now Haha is at place of A. now he decide the M if equal to 2, so he will search A first, then he will search the C box, for C is separated by 2-1 = 1 box B from the current box A . Then he will search the box B ,then he will search the box A. So after three times he establishes that he can find the beautiful handkerchief. Now I will give you N and M, can you tell me that Haha is able to find the handkerchief or not. If he can, you should tell me "YES", else tell me "POOR Haha". |
Input
There will be several test cases; each case input contains two integers N and M, which satisfy the relationship: 1<=M<=100000000 and 3<=N<=100000000. When N=-1 and M=-1 means the end of input case, and you should not process the data.
|
Output
For each input case, you should only the result that Haha can find the handkerchief or not.
|
Sample Input
3 2 -1 -1 |
Sample Output
YES |
简单的说就是这个Haha呢,他有强迫症,每次到他猜手绢,他只猜距离他的盒子m-1个盒子的下一个盒子,即使猜了一圈,那些不符合条件的盒子他都不猜,就比如a,b,c,d四个围坐在一起,haha说他只猜离他(2-1)个盒子的盒子假设它的位置是a,那么即使他开了a和b的盒子里没有东西了,他还是要开这两个箱子,直到有人说“poor haha”他才肯换个方式猜。
题目分析:
仔细想想,如果盒子数和m有公约数(距离m-1就是加m),那么haha就不可能找到,否则haha可以找到手绢,求出两个数的公约数,逻辑上,若是这个数小于较小的那个数,则有公约数,否则就是没有。
#include<iostream>
using namespace std;
int gcd(int a, int b);
int main()
{
int n, m;
int temp , i;
while ((cin >> n >> m) && n != -1 || m != -1)
{
temp = gcd(n, m);
if (temp==1)
cout << "YES" << endl;
else
cout << "POOR Haha" << endl;
}
return 0;
}
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a%b);
}