题目:
若代码有错,请指出
求满足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 }