思路:可以看出,ADA II数不是很多,可以先将其全部列出来。但一个ADA II数可以有不同的 i 和 j ,所以可以用到集合:set 每个元素最多出现一次。将所有的ADA II数存到set中,然后直接寻找就可以了
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <limits.h>
using namespace std;
set<int> s;
int main()
{
int n, i, j;
//set<long long>::iterator k;
for (i = 2; i * i <= INT_MAX / i; i++)
{
for (j = 2; j * j <= INT_MAX / (i *i * i); j++)
{
if (i != j)
{
s.insert(i * i * i * j * j); //将符合条件的ADA II数存入s
}
}
}
while (scanf("%d", &n) != EOF)
{
if (s.find(n) != s.end()) //set自带的find()函数
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
第一次体验到了STL的威力,感觉到它的方便。嗯