//给出k
//找x,y,z使得x^z+y^z+x*y*z = k
//x,y,z都为正整数x
1问有多少种方法 //当z = 2时,可以看到左边是一个完全平方 //而当z>=3时,可以暴力枚举x,y //由于k<2^31所以x<2^(31/3)枚举复杂度可以过 #include
#include
#include
#include
using namespace std ; const int maxn = 100 ; const int inf = 0x7fffffff ; typedef __int64 ll; ll pow(ll a , ll b) { ll c = 1; while(b) { if(b&1)c*=a; if(c > inf)return -1 ; b >>= 1; a *= a ; } return c ; } int main() { int k; while(scanf(%d ,&k) && k) { int ans = 0 ; int t = (int)sqrt((double)k) ; if(t*t == (double)k) ans += (int)(t-1)/2 ; for(ll i = 1;i*i*i < k ;i++) for(ll j = i + 1;j*j*j< k;j++) for(ll s = 3;;s++) { ll t1 = pow(i,s) ;ll t2 = pow(j , s) ; if(t1 == -1 || t2 == -1) break; if(t1 + t2 + i*j*s ==k) ans++ ; if(t1 + t2+ i*j*s > k) break; } printf(%d ,ans) ; } return 0 ; }
?