Description
Alim 和 Sufian 是好朋友。他们最近找到了一个好玩的游戏,叫做 Tip Top。游戏规则如下:
- 确定一个整数。
- 找出这个整数的所有因子。
- Alim 先手,每人轮流取一个因子。谁先取到最后一个因子谁就是赢家。
假设整数为 \(n\),请问 Alim 是否能赢。
数据范围:\(T\) 组数据,\(T\leqslant 10^5\),\(1\leqslant n\leqslant 10^{18}\)。
Solution
非常简单的一道题目。由题目可知,我们只需要求出因子的个数的奇偶性即可。
那怎么判断因子个数的奇偶性?这其实也是一个比较显而易见的结论:如果 \(n\) 是一个完全平方数,那么 \(n\) 的因子个数是奇数,否则 \(n\) 的因子个数是偶数。证明也很简单,我们知道,如果 \(i\) 是 \(n\) 的一个因子,那么 \(\frac ni\) 也是 \(n\) 的一个因子。那么如果 \(n\) 是完全平方数,那么就会存在一个因子 \(i\),使得 \(i=\frac ni\),那么 \(i\) 和 \(\frac ni\) 就重复了,需要剔除一个。这也就能够解释 \(n\) 是完全平方数时它的因子个数是奇数了。
那么这道题目就做完了,注意输出格式。
Code
namespace Solution {
iv Main() {
MCase {
ll n; read(n);
printf("Case %d: ", kase);
((ll)sqrt(n) * (ll)sqrt(n) == n) ? Yes : No;
}
return;
}
}