Pagodas HDU - 5512

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pagodas HDU - 5512相关的知识,希望对你有一定的参考价值。

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;
}

以上是关于Pagodas HDU - 5512的主要内容,如果未能解决你的问题,请参考以下文章

Pagodas HDU - 5512

hdu 5512 Pagodas

HDU 5512 Pagodas(等差数列)

hdu 5512 Pagodas 扩展欧几里得推导+GCD

HDU 5512 题解

D - Pagodas