Two monks, Yuwgna and Iaka, decide to make glories great again. They take turns to build pagodas and Yuwgna takes first. For each turn, one can rebuild a new pagodas labelled i (i∉{a,b} and 1≤i≤n)i (i∉{a,b} and 1≤i≤n) if there exist two pagodas standing erect, labelled jj and kk respectively, such that i=j+ki=j+k or i=j−ki=j−k. Each pagoda can not be rebuilt twice.
This is a game for them. The monk who can not rebuild a new pagoda will lose the game.
For each test case, the first line provides the positive integer n (2≤n≤20000)n (2≤n≤20000)and two different integers aa and bb. OutputFor each test case, output the winner (``Yuwgna" or ``Iaka"). Both of them will make the best possible decision each time. Sample Input
16 2 1 2 3 1 3 67 1 2 100 1 2 8 6 8 9 6 8 10 6 8 11 6 8 12 6 8 13 6 8 14 6 8 15 6 8 16 6 8 1314 6 8 1994 1 13 1994 7 12Sample Output
Case #1: Iaka Case #2: Yuwgna Case #3: Yuwgna Case #4: Iaka Case #5: Iaka Case #6: Iaka Case #7: Yuwgna Case #8: Yuwgna Case #9: Iaka Case #10: Iaka Case #11: Yuwgna Case #12: Yuwgna Case #13: Iaka Case #14: Yuwgna Case #15: Iaka Case #16: Iaka
題意:由題目中給出的兩個數相加或相減得到新的數,再將這些數繼續相加相減直到不再出現新的數。
題解:i1=j+k,i2=j-k,i3=2j,i4=3k...可以推出i=mj+nk,即i%gcd(j,k)==0,ans=n/gcd(j,k).
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<stdio.h>
using namespace std;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
int cas;scanf("%d",&cas);
for(int c=1;c<=cas;c++){
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
int d=gcd(a,b);
int ans=n/d;
printf("Case #%d: ",c);
if(ans%2)
printf("Yuwgna\n");
else
printf("Iaka\n");
}
}