#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;
}
HDU4576 A very hard mathematic problem(很好的搜索)
最新推荐文章于 2021-04-13 19:33:10 发布