hdu 4282 A very hard mathematic problem

题目:

若代码有错,请指出
求满足X^Z + Y^Z + XYZ = K
K (0 < K < 2^31), (X < Y, Z > 1)

分析:

注意到z的值最大为30(x<y所以y>=2)
当k==2时,直接利用完全平方公式判断即可,可变成(x+y)^2 = k
当k>2时,直接枚举z,x,y可以水过(z>2时x的值最大为1290左右)

6726850 2012-09-09 17:12:22 Accepted 4282 281MS 472K 1151 B G++
View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 
 5 using namespace std;
 6 
 7 long long pow(long long x,int z){
 8     long long temp = x;
 9     for(int i=2;i<=z;i++)
10         x *= temp;
11     return x;
12 }
13 
14 int main(){
15     freopen("sum.in","r",stdin);
16     int n;
17     while(cin>>n,n){
18         int ans = 0;
19         int temp = sqrt(n);
20         if(temp*temp==n)
21             ans += (temp-1)>>1;
22 
23         for(int z=3;z<31;z++){
24             for(long long x=1;;x++){
25                 long long u = pow(x,z);
26                 if(u>=n/2)
27                     break;
28                 for(long long y=x+1;;y++){
29                     long long v = pow(y,z);
30                     if(u+v+z*x*y>n)
31                         break;
32                     else if(u+v+z*x*y==n){
33                         ans++;
34                         break;
35                     }
36                 }
37             }
38         }
39         cout<<ans<<endl;
40     }
41     return 0;
42 }
posted @ 2012-09-09 17:19  yejinru  阅读(1046)  评论(3编辑  收藏  举报