Problem Description
A cubic number is the result of using a whole number in a multiplication three times. For example,
3×3×3=27
so
27
is a cubic number. The first few cubic numbers are
1,8,27,64
and
125
. Given an prime number
p
. Check that if
p
is a difference of two cubic numbers.
Input
The first of input contains an integer
T (1≤T≤100)
which is the total number of test cases.
For each test case, a line contains a prime number p (2≤p≤1012) .
For each test case, a line contains a prime number p (2≤p≤1012) .
Output
For each test case, output 'YES' if given
p
is a difference of two cubic numbers, or 'NO' if not.
Sample Input
10 2 3 5 7 11 13 17 19 23 29
Sample Output
NO NO NO YES NO NO NO YES NO NO
#include <iostream>
#include<cstdio>#include<algorithm>
using namespace std;
int main()
{
int T,p,flag,i;
scanf("%d",&T);
while(T--)
{
flag=0;
scanf("%d",&p);
for(i=1;i<=1e6+10;i++)
{
if(3*i*i+3*i+1==p) //(x-y)(x^2+xy+y^2)=p(p是质数)——> x-y=1以及x^2+xy+y^2=p, 将(x-y=1)带入后得到p=3x^2+3x+1。
{
flag=1;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}