hdu6216 A Cubic number and A Cubic Number 打表找规律 + 二分

来源:互联网 发布:陕西网络作家协会 编辑:程序博客网 时间:2024/06/16 18:51

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=6216

题意:

给定一个素数,判定这个素数能不能由两个不同的数字的立方的和

思路:

打表找规律,可以发现,满足条件的素数,一定等于x-1,x这样两个数字的立方的和,反过来则不一定成立,于是就可以二分x求答案了

#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 600000 + 10;ll a[N];int table(){    int k = 0;    for(int i = 2; ;i++)    {        a[++k] = 1LL * -(i-1)*(i-1)*(i-1)  + 1LL * i*i*i;        if(a[k] > 1e12) break;    }    return k;}int main(){    int t, k = table();    ll p;    scanf("%d", &t);    while(t--)    {        scanf("%lld", &p);        puts(binary_search(a + 1, a + 1 + k, p) ? "YES" : "NO");//        int l = 2, r = 1000000;//        bool flag = false;//        while(l <= r)//        {//            int mid = (l + r) >> 1;//            ll tmp = 1LL * -(mid-1)*(mid-1)*(mid-1) + 1LL * mid*mid*mid;//            if(tmp == p)//            {//                flag = true; break;//            }//            else if(tmp > p) r = mid - 1;//            else l = mid + 1;//        }//        puts(flag ? "YES" : "NO");    }    return 0;}
阅读全文
0 0
原创粉丝点击