A very hard mathematic problem(天津online)
2012-12-07 10:19
295 查看
/* x^z+y^z+x*y*z=k,x<y , z>1 , max(k)=2^31,k已知!求x y z的组合,k的范围很明:1<k<32 ,显然当z取2的时候,是个完全平方式!那么如果考虑 (x+y)^z=k,那么(x+y)最大可以取到 1309左右,那么在1<k<32,0<x+y<1305,x<y;这个区间里面穷举就可以了!点击打开链接
PS:c++内部的pow()函数很不靠谱,运行效率低就算了,还对参数传递十分严格,以后不管什么情况,一定要自己写pow函数!
#include < iostream > #include < cstdio > #include < math.h > #define N 1309 typedef __int64 LL; using namespace std; LL POW(int x,int y) { LL s=1; for(int i=1;i<=y;i++) s*=x; return s; } int main () { //freopen("t.txt","r",stdin); LL x,y,z,k,s,t,r,w; while(scanf("%I64d",&k),k) { s = 0; z = 2; t = r = w =0; t = ( LL )sqrt(k*1.0); if(t * t == k) s= (t-1)/2; while(z++<32) { for(t=0, x=1 ; x<N ; x++) { t = POW(x,z); if(t >= k/2) break; for(y=x+1 ; y<N ; y++) { r=POW(y,z); w=t + r + x*y*z; if(w>=k){ if(w==k) s+=1; break; } } } } printf("%I64d\n",s); } return 0; }
PS:c++内部的pow()函数很不靠谱,运行效率低就算了,还对参数传递十分严格,以后不管什么情况,一定要自己写pow函数!
相关文章推荐
- 0909 - 天津网络赛 - hdu 4282 - A very hard mathematic problem
- HDU 4282 A very hard mathematic problem(解方程 天津网络赛)
- HDU 4282 A very hard mathematic problem(12年天津网络赛-数学)
- hdu 4282 A very hard mathematic problem (2012 天津网络赛 1005)
- HDU 4282 A very hard mathematic problem [剪枝/二分]
- C - A very hard mathematic problem
- A very hard mathematic problem
- 2012天津赛区网络赛第五题---A very hard mathematic problem(hdu4284)
- E - A very hard mathematic problem题解
- hdu 4282 A very hard mathematic problem
- hdu 4282 A very hard mathematic problem(二分)
- A very hard mathematic problem
- hdu 4282 A very hard mathematic problem(二分+枚举)
- 杭电acm 4282 A very hard mathematic problem
- HDUOJ 4282 A very hard mathematic problem
- hdu4282 A very hard mathematic problem
- hdu 4282 A very hard mathematic problem(二分+枚举)
- hdu4282 A very hard mathematic problem
- HDU 4282 A very hard mathematic problem 二分
- hdu4282 A very hard mathematic problem(二分)