A Cubic number and A Cubic Number
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 638 Accepted Submission(s): 319
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
2017 ACM/ICPC Asia Regional Qingdao Online
k为素数,k为两立方数相减
将k分解因式,素数只能是1*本身的形式----------> k只能为相邻两个立方数的差
k=3b(b+1)-1
k-1=3b(b+1)
(k-1)/3=b(b+1)
筛选:3的倍数------->sqrt+floor 相邻两数之积
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int t;
long long p;
long long temp;
long long g;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&p);
if((p-1)%3!=0)
{
printf("NO\n");
continue;
}
temp=(p-1)/3;
g=floor(sqrt(temp));
if(g*(g+1)==temp)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}