A Cubic number and A Cubic Number
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 101 Accepted Submission(s): 58
Total Submission(s): 101 Accepted Submission(s): 58
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
题意:
给出一个素数n,判断能否表示为a*a*a-b*b*b的形式。
思路:
考虑立方差公式
n=a^3-b^3=(a-b)(a^2+ab+b^2)=素数,
则a-b=1;
设b=t,a=t+1,则 n= 3*t^2+3*t+1;
数据量不大 ,直接暴力考虑有没有解即可。
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
long long n;
scanf("%lld",&n);
long long i,flag=0,t=1;
while(3*t*t+3*t+1<=n){
if(3*t*t+3*t+1==n){
printf("YES\n");
flag=1;
}
t++;
}
if(!flag)
printf("NO\n");
}
return 0;
}
最近好忙,杭州南京长沙到处跑,心累。
做道水题缓一缓。
如果能打一辈子比赛不考虑其他就好了 2333
最后,恭喜集训队顺利打入青岛区域赛,加油加油,再创新高吧~