题意: X^z + Y^z + X*Y*z = M 有多少不同解, 枚举 z 和X 然后二分 Y ,复杂度看起来很高, 可以因为涉及到了幂, 枚举数一下子就降了很多;
#include<cstdio>
#include<cstring>
using namespace std;
#define M 50000
long long x[M];
int main()
{
long long K;
int z, ans, len;
while( scanf( "%I64d", &K ) && K ){
len = 0;
memset( x, 0, sizeof( x ) );
for( long long i = 1; i*i <= K; i++ )
x[++len] = i;
z = 1; ans = 0;
while( len > 1 ){
for( long long i = 1;x[i] ; i++ ){
x[i] *= i;
if( x[i] > K ){
len = i-1;
break;
}
}
if( len < 2 ) break;
++z;
for( int i = 1; i < len; i++ ){
int l = i+1;
int r = len;
int mid;
while( r > l ){
mid = (l+r) >> 1;
if( x[i] + x[mid] + z * i * mid >= K )
r = mid;
else
l = mid + 1;
}
if( x[i] + x[r] + z*i*r == K )
ans++;
}
}
printf( "%d\n", ans);
}
}