题目描述
输入
少于4000行数据组成,每行一个整数n(0<n<2^31)。
输出
每个整数n对应一行输出,如果是ADA Ⅱ型数,则输出一行YES,否则输出一行NO。
样例输入
1 72
样例输出
NO YES
#include<stdio.h> int main() { long long i,a,b,tep,low,high,mid,n; while (scanf("%lld", &n)!=EOF) { for (i = 2; i <=816; i++) // 另一个数最小为2^2=4 所以这个数的立方最大为 2^29=536870912 815*815*815=541343375 { a = i*i*i; if (n%a != 0)continue;//判断另一个数是否整数 tep = n / a; high = tep; low = 2; while(low<=high) { mid = (low + high)/2; b = mid*mid; if (b >= tep) { high = mid-1; } else { low = mid + 1; } } if ((low*low == tep) && (low != i)) break;// low 另一个值 } if (i <= 816) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }