hdu6216 A Cubic number and A Cubic Number

来源:互联网 发布:php官方文档 编辑:程序博客网 时间:2024/06/03 21:27

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 (1T100) which is the total number of test cases.
For each test case, a line contains a prime number p (2p1012).
 

Output
For each test case, output 'YES' if given p is a difference of two cubic numbers, or 'NO' if not.
 

Sample Input
102357111317192329
 

Sample Output
NONONOYESNONONOYESNONO
 

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




原创粉丝点击