编写语句验证3³+4³+5³=6³ 经验证成立和 6³+7³+……+69³=180³经验证成立较高要求,可根据实际情况选做(可得到附加的2分):找到更多的这样的整数:一些相续正

package a;


import java.util.Scanner;


public class a1 {

           public static void main(String[] args){

           //下式验证等式3³+4³+5³=6³是否成立

           long left1=Cube(3)+Cube(4)+Cube(5); 

           long right1=Cube(6);

           if (left1==right1){

           System.out.println("等式 3³+4³+5³=6³ 经验证成立");

           }else{

           System.out.println("等式 3³+4³+5³=6³ 经验证不成立");

           }

               //下式验证等式 6³+7³+……+69³=180³ 是否成立

           long left2=0;

           for (int i=6;i<=69;i++){

           left2=left2+Cube(i);

           }

           long right2=Cube(180);

           if(left2==right2){

           System.out.println("等式 6³+7³+……+69³=180³ 经验证成立");

           }else{

           System.out.println("等式 6³+7³+……+69³=180³ 经验证成立");

           }

           System.out.println();

           System.out.printf("(因为Eclipse对中文支持度不够,请将光标移至冒号后输入)\n    寻找更多的可能情况,请输入“步遥”:");

           //System.out.println();

           Scanner input = new Scanner(System.in);

           String flag=input.next();

           long Rise[]={1,1};

           long Max=Long.MAX_VALUE; //最大数

           while(flag.equals("步遥")){

           for(int i=0;i<10;i++){

          Rise=More(Rise,Max);

           }

           System.out.printf("(因为Eclipse对中文支持度不够,请将光标移至冒号后输入)\n    如果需要继续查找请继续输入步遥:");

           flag =input.next();

           }

           input.close();

           System.out.printf("输入错误,程序退出,请检查是否输入正确。");}

               //下式为验证附加题目

           /*long left3=0;

           int n=0;

           int m=0;

           for(m=5;m<100;m++){

           left3=left3+Cube(m); 

           for(n=6;n<100;n++){

           long right3=Cube(n);

           if(left3==right3){

                   System.out.println("m="+m+"n="+n);

                   }else;

               }

           }  */  

  

                //三次方函数

           private static long Cube(long x){

           return (int)Math.pow(x,3);

           }

          private static long[] More(long Rise[],long Max){

          Rise[1] = Rise[1] + 1;// 进来时将上次的状态+1

              for (; Rise[0] < Max; Rise[0]++, Rise[1] = Rise[0] + 1) {// 累加立方数开始项

                  long sum = Rise[0] * Rise[0] * Rise[0], sum2;

                  long checkernum = Rise[1] + 1;// 优化:减少无意义的尝试

                  System.out.print("Testing-> 起始项="+Rise[0]+"\r");

                  for (long temp = Rise[0] + 1; temp < Rise[1]; temp++) {// 补全中间项

                      sum = sum + temp * temp * temp;

                  }

                  for (; Rise[1] < Max; Rise[1]++) {// 累加立方数结束项

                      sum = sum + Rise[1] * Rise[1] * Rise[1];

                      if (sum > Max * Max * Max || sum < 0) // 超出可能范围了

                      {break;}

                      

                      for (; checkernum < Max; checkernum++) { // 等式右边项

                          sum2 = checkernum * checkernum * checkernum;

                          if (sum2 > sum) {

                              break;

                          } else if (sum2 == sum) {

                              System.out.println(Rise[0] + "^3+" + (Rise[0] + 1) + "^3+...+" + Rise[1] + "^3 = " + sum

                                      + " = " + checkernum + "^3\t\t\t\t");

                              return Rise;// 输出当前状态,实现断点下次继续向下查找

                          }

                      }

                  }


              }

              System.out.printf("受限于long型变量的最大值,我只能找到这么多了");

              return Rise;

          }

      }

猜你喜欢

转载自blog.csdn.net/qq_37455615/article/details/80199596
今日推荐