SP16033 TIPTOP - Tip Top Game

题意

有一个正整数 nn,找出它的所有因数,两个人轮流取走一个它的因数,取不到因数的人失败。

如果先手胜利,输出 Yes,否则输出 No

分析

显然,当一个数的因数有奇数个时,先手会获胜;当一个数的因数有偶数个时,后手会获胜。

于是,这道题就变成了:判断一个数的因数个数是否为奇数。

于是它就变成了一道小学数学题。


对于一个数 nnn=a1×b1=a2×b2==am×bmn=a_1\times b_1=a_2\times b_2=…=a_m\times b_m,其中 a1,a2,,ama_1,a_2,…,a_mb1,b2,,bmb_1,b_2,…,b_m 都是整数且 aibia_i\le b_i,则他们都是 nn 的因数,若任意 ai<na_i<\sqrt n,说明 ai,bia_i,b_i 是成对出现的,nn 的因子有偶数个,反之,若某个 ax=na_x=\sqrt n,说明这对因子 ax,bxa_x,b_x 只算一个,则 nn 的因子有奇数个。所以我们只要判断 nn 是否有为 n\sqrt n 的因子即可。


以上横线间的内容可以不看。

总之,我们只要判断 nn 是否为完全平方数即可。

注意输出格式。

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll t,n,a;
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>n;
		a=sqrt(n);
		if(a*a==n)
			printf("Case %d: Yes\n",i);
		else
			printf("Case %d: No\n",i);
	}
	return 0;
}
posted @ 2021-08-29 23:07  luckydrawbox  阅读(6)  评论(0)    收藏  举报  来源