题目描述
ADA Ⅱ型数是指能表达成p^2与q^3两者之乘积的整数,p和q均大于1且不相等。72=2^3*3^2, 是最小的ADA Ⅱ型数。给定一个整数n,判定其是否为ADA Ⅱ型数。
输入
少于4000行数据组成,每行一个整数n(0<n<2^31)。
输出
每个整数n对应一行输出,如果是ADA Ⅱ型数,则输出一行YES,否则输出一行NO。
样例输入
1
72
样例输出
NO
YES
思路:是p的2次方*q的3次方,所以我们枚举q,然后二分p即可,q的范围:q^3<=2^31
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
typedef long long ll;
int main()
{
ll n;
while(cin>>n){
int i;
for( i=2;i<=850;i++){
ll a=i*i*i;
if(n%a!=0)
continue;
ll l=2,r=n/a,mid,con=n/a;
while(l<=r){
mid=(l+r)/2;
ll num=mid*mid;
if(num>=con)
r=mid-1;
else
l=mid+1;
}
if(l*l==con&&l!=i)
break;
}
if(i<=850)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}