Pagodas HDU - 5512
题意:
一开始给你两个数a和b,你可以得到c通过,c=a+b,或者c=a-b,你所能得到的数的范围是1~n,两个人轮流操作,当有一方无法操作时,另一方获胜
题解:
c=a+b,c=a-b
我们可以发现所得数都满足ax+by,而根据裴蜀定理:对于任意的正整数a,b,一定存在非零整数x,y,使得xa+yb=gcd(a,b),对于任意的xa+yb=d,d一定是gcd(a,b)的倍数
所有1~n中可以被操作生成的数的数量为n/gcd(a,b),因为一开始给了你两个,所以还要减2,n/gcd(a,b)-2
代码:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){if(b)return gcd(b,a%b);return a;
}
int main(){int t;scanf("%d",&t);int cas=0;//cout<<gcd(6,8);while(t--){int n,a,b;scanf("%d%d%d",&n,&a,&b);int minn=gcd(a,b);int num=n/minn-2;if(num%2==0)printf("Case #%d: Iaka\n",++cas);else printf("Case #%d: Yuwgna\n",++cas);}return 0;
}