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 }

你可能感兴趣的:(Math)