zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    《你一定爱读的极简欧洲史》
    PAT 1051. 复数乘法
    PAT 1050. 螺旋矩阵
    PAT 1049. 数列的片段和
    PAT 1048. 数字加密
    PAT 1047. 编程团体赛
    PAT 1046. 划拳
    PAT 1045. 快速排序
    PAT 1044. 火星数字
    PAT 1043. 输出PATest
  • 原文地址:https://www.cnblogs.com/yejinru/p/2677657.html
Copyright © 2011-2022 走看看