hdu4282 x^z+y^z+x*y*z=k 解的个数
生活随笔
收集整理的這篇文章主要介紹了
hdu4282 x^z+y^z+x*y*z=k 解的个数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ?x^z + y^z + x*y*z = k; (x < y ,z > 1),給你一個k問有多少組解.
? ? ?x^z + y^z + x*y*z = k; (x < y ,z > 1),給你一個k問有多少組解.
思路:
? ? ? ?暴力枚舉z,y,然后二分查找x.注意一點(diǎn)最好用快速冪,別用pow,不然有可能會超時,如果先把z=2的處理了會快一點(diǎn).應(yīng)該會0ms.....
#include<stdio.h> __int64 quickp(__int64 a,__int64 n) {__int64 aa=1;while(n){if(n&1)aa*=a;a*=a;n>>=1;}return aa; }int main () {__int64 x ,y ,z ,i ,j ,k;__int64 low ,up ,mid;while(~scanf("%I64d" ,&k) && k){__int64 sum = 0;for(z = 2 ;z <= 31 ;z ++){for(y = 2 ;y <= 46341 ;y ++){if(quickp(y ,z) > k) break;low = 1;up = y-1;__int64 mk = 0;while(low <= up){mid = (low + up) / 2;if(quickp(mid ,z) + quickp(y ,z) + mid*y*z >= k){up = mid - 1;mk = mid;}elselow = mid + 1;}if(quickp(mk ,z) + quickp(y ,z) + mk*y*z == k)sum ++;}}printf("%I64d\n" ,sum);}return 0; }
總結(jié)
以上是生活随笔為你收集整理的hdu4282 x^z+y^z+x*y*z=k 解的个数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu4284 dfs+floyd
- 下一篇: hdu4279 找规律+小想法