算法
(数学) $O(1)$
注意到 $T$ 和 $N$ 的上限,不难想到题目应该要我们在 $o(1)$ 时间复杂度内解决。
当 $N = 2^d \times a \ (a\text{为偶数})$ 时,$N$ 的因子集合为:
$$\{2^i \times j \mid 0 \leqslant i \leqslant d, j \text{为} a \text{的一个因子}\}$$
所以,如果 $N$ 有 $m$ 个奇数因子,那么它就有 $dm$ 个偶数因子。
于是,可以得到答案:
- 如果 $N$ 能被 $4$ 整除,则输出
Even
- 如果 $N$ 能被 $2$ 整除但不能被 $4$ 整除,则输出
Same
- 如果 $N$ 不能被 $2$ 整除,则输出
Odd
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using ll = long long;
int main() {
int t;
cin >> t;
while (t--) {
ll n;
cin >> n;
if (n % 4 == 0) puts("Even");
else if (n % 2 == 0 and n % 4) puts("Same");
else if (n % 2) puts("Odd");
}
return 0;
}