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;
}
3263

被折叠的 条评论
为什么被折叠?



