题意:X^Z + Y^Z + XYZ = K,问一共有多少种满足这个条件的x,y,z。
当z=2时,(x+y)^2=k,则有(sqrt(k)-1)/2种方案。
又由于z<=30,故可以使用枚举。
#include <iostream>
#include <math.h>
using namespace std;
long long pow(long long x,int z)
{
long long tmp=x;
for(int i=2;i<=z;i++)
tmp*=x;
return tmp;
}
int main()
{
int n,tmp,ans;
while(cin>>n,n)
{
ans=0;
tmp=sqrt(n);
if(tmp*tmp==n)
ans+=(tmp-1)/2;
for(int z=3;z<31;z++)
{
for(long long x=1;;x++)
{
long long u=pow(x,z);
if(u>=n/2) break;
for(long long y=x+1;;y++)
{
long long v=pow(y,z);
if(u+v+x*y*z>n) break;
if(u+v+x*y*z==n)
{
ans++;
break;
}
}
}
}
cout<<ans<<endl;
}
return 0;
}