这题如果直接枚举n的因子进行计数会超时。下面对这题进行分析以找到正确解法:
对n进行因数分解:
n = a0^k0 * a1^k1 * a2^k2 * ...... * am^km
则n的因子个数为(1+k0)*(1+k1)*(1+k2)*......*(1+km).
对题意分析知n有奇数个因子时输出“yes”,故上式中当且仅当k0, k1, k2, ......, km均为偶数时n的因子数为奇数并输出“yes“。
而此时由于 n = a0^k0 * a1^k1 * a2^k2 * ...... * am^km , n为完全平方数。
故本题只需判定n是否为完全平方数即可。
另:n的范围为<=2^32-1, 需使用long long 型
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
long long n;
while(cin >> n && n!=0)
{
long root=sqrt(double(n));
if(root*root==n) cout << "yes\n";
else cout << "no\n";
}
return 0;
}