hdu 4282 爆搜

来源:互联网 发布:psd下载软件 编辑:程序博客网 时间:2024/04/28 16:10

题意:问有多少中情况满足  X^Z + Y^Z + XYZ = K;(1<=x<y,    z>=2,k<(2<<31))

解法:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;__int64 k;__int64 qpow(int a,int b){    __int64 res=1,d=a;    while(b)    {        if(b&1)res*=d;        b>>=1;        d=d*d;    }    return res;}int main(){    while(scanf("%d",&k),k)    {        int ans=0;        int x,y,z;        __int64 res,sum;        int s=(int)sqrt(k*1.0);        if(s*s==k)        {            ans+=(s-1)>>1;        }        for(z=3;z<=30;z++)        {            x=1;            while(x>=0)            {                res=qpow(x,z);                if(res>=k/2) break;                y=x+1;                while(y>=x+1)                {                    sum=qpow(y,z)+x*y*z+res;                    if(sum>k) break;                    if(sum==k)                    {                        ans++;                        break;                    }                    y++;                }                x++;            }        }        printf("%d\n",ans);    }    return 0;}


原创粉丝点击