HDU4576 A very hard mathematic problem(很好的搜索)

来源:互联网 发布:传至大数据3期百度云 编辑:程序博客网 时间:2024/05/22 11:40
#include<iostream>#include<cmath>#include<cstdio>using namespace std;typedef long long ll;ll power(ll a,ll n){    ll ans=1;    while(n>0){        if(n&1) ans*=a;        a=a*a;//a=a的 2的i次方 的次方        // a a^2 a^2*a^2=a^4 a^4*a4=a^8        n>>=1;    }     return ans;}ll k;ll sum;int main(){    while(scanf("%I64d",&k),k!=0){        sum=0;        ll t=sqrt(k);        if(t*t==k)sum+=(t-1)/2;        for(int z=3;z<32;z++){            //if(power(2,z)>=k) break;            for(int x=1;;x++){                ll u=power(x,z);                if(2*u>=k)break;                for(int y=x+1;;y++){                    ll v=power(y,z);                    if(v+u+x*y*z>k)break;                    if(u+v+x*y*z==k)sum++;                }            }        }        printf("%I64d\n",sum);    }    return 0;}