hdu4282A very hard mathematic problem 暴力枚举

2015-11-21 00:57:01 · 作者: · 浏览: 5
//给出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 ; }

?