HDU 6216 A Cubic number and A Cubic Number 公式/打表 [2017 ACM/ICPC Asia Regional Qingdao Online]

来源:互联网 发布:网络空间安全导论 pdf 编辑:程序博客网 时间:2024/06/07 20:55

题目链接

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).

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

可以根据b^3-a^3和素数条件推出b+a=n,则可以推出公式n = 3*i*i+3*i+1然后再打表

#include<bits/stdc++.h>using namespace std;typedef long long ll;int T;vector<ll> ans;ll n;int main(){//    freopen("data.txt","r",stdin);    for(ll i=0;i<1000005;i++)    {        ans.push_back(3*i*i+3*i+1);    }    int len = ans.size();    scanf("%d", &T);    while(T--)    {        scanf("%lld",&n);        if(!binary_search(ans.begin(),ans.end(),n))        {            printf("NO\n");        }        else        {            printf("YES\n");        }    }    return 0;}
阅读全文
0 0