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
Source
输入输出测试题意:给出一个质数,判断该质数是否为两立方数之差首先x^3-y^3为一个质数,则x=y+1带入化简,得3*y(y+1)+1所以一个质数n要是两立方数之差,则n-1是3的倍数,且n-1是两相邻数之积
#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
#include<vector>
#include <algorithm>
#include<math.h>
using namespace std;
int main()
{
int i,T;
scanf("%d",&T);
while(T--)
{
double n;
scanf("%lf",&n);
if((long long int )(n-1)%3==0)
{
n=(n-1)/3;
long long int j = sqrt(n);
if(j*(j+1) == (long long int )n)
printf("YES\n");
else
printf("NO\n");
}
else
{
printf("NO\n");
}
}
return 0;
}