題目大意:意思是n個人圍成一個圈,大家玩丟手帕游戲,手帕藏在某一個人的箱子裡,Haha來找,每一次他都會跳過m-1個人。問你Haha是不是一定能找到手帕。因為Haha找的次數是無限的,可以永遠找下去,所以,只要他能把所有的人都找一遍就一定能找到。但按照他的這種找法,如果n和m不互質的話,不互質就會出現某些人是永遠不會找。所以看一下 n和m的最大公約數就行了
解題思路:
判斷是否可以遍歷所有的盒子,只要盒子數和每次走的步數存在值不等於1的最大公約數時,他就會回到起點,從而做重復的動作。
歸根結底,其實就是給出盒子數和步數,判斷能否遍歷所有盒子。這裡有一個規律就是如果和字數和步數互質(最大公約數為1),那麼則能遍歷,否則不能遍歷。
代碼如下:
/*
* 2014_2.cpp
*
* Created on: 2013年8月10日
* Author: Administrator
*/
#include <stdio.h>
/**
* 輾轉相除法,用來求最大公約數
*/
int mul(int a , int b){
int temp;
while(b!=0){
temp = b;
b = a%b;
a = temp;
}
return a;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
if(n==-1&&m==-1){
break;
}
//互質,則最大公約數為1
if(mul(n,m) != 1){
printf("POOR Haha\n");
}else{
printf("YES\n");
}
}
}