【队内胡策 11.1】 T1 T2

来源:互联网 发布:杭州腾亿网络 编辑:程序博客网 时间:2024/04/30 10:30

至于我为什么把两个题放一起,看题就知道了:

T1

这里写图片描述
这里写图片描述
O(T*3√p),10^8,正好卡时
啥也不说,代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long t,p;int main(){    scanf("%lld",&t);    while(t--)    {        scanf("%lld",&p);        long long i;        for(i=1;i*i*i<=p;++i);        i--;        if(i*i*i==p&&p) printf("YES\n");        else printf("NO\n");    }    return 0;}

T2

这里写图片描述
这里写图片描述
这里写图片描述

QAQ考试的时候是真的没有想到。。
一心打表2333
打表可以六十分啊
正解:
根据立方差公式:
p=x^3-y^3
=(x-y)(x^2+xy+y^2)
因为p为质数,故p只能写成1*p的形式。又x^2+xy+y^2一定大于1,故x-y=1
因此,给定的p一定为相邻的两个数的平方差
然后就是暴力枚举–_–

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long t,p;int main(){    scanf("%lld",&t);    while(t--)    {        scanf("%lld",&p);        bool flg=0;        for(long long i=1;i<=1000010;++i)        {            long long j=i-1;            long long x=i*i*i,y=j*j*j;            if(x-y>p) break;            if(x-y==p)             {                flg=1;                break;            }        }        if(flg) printf("YES\n");        else printf("NO\n");    }    return 0;}
原创粉丝点击