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;
}
}