这是从http://duodaa.com/blog/index.php/archives/538/截得图,以下是代码
package math; import java.math.BigDecimal; import java.util.function.BiConsumer; public class TestEuler { public static void main(String[] args) { boolean flg=true; for(long x=1;flg;x++){ for(long y=1;flg&&(y<x);y++){ for(long z=1;flg&&(z<y);z++){ for(long w=1;true;w++){ int r=power4Long(w).compareTo(sum(power4Long(x),power4Long(y),power4Long(z))); System.out.print(x+":"+power4Long(x).toString()+","); System.out.print(y+":"+power4Long(y).toString()+","); System.out.print(z+":"+power4Long(z).toString()+","); System.out.println(w+":"+power4Long(w).toString()+";"); if(r==1){ break; } if(r==0){ flg=false; break; } } } } } } public static boolean checkEuler(long x,long y,long z,long w){ return power4Long(w).compareTo(sum(power4Long(x),power4Long(y),power4Long(z)))==0; } public static BigDecimal power4Long(Long b){ return power4(new BigDecimal(b)); } public static BigDecimal power4(BigDecimal b){ return b.multiply(b).multiply(b).multiply(b); } public static BigDecimal sum(BigDecimal... bs){ BigDecimal reB=new BigDecimal(0); for(BigDecimal b:bs){ reB=reB.add(b); } return reB; } }
事实上这样的四层循环极大的消耗着计算机的性能计算很慢,要考我的这些代码来验证欧拉猜想估计得跑到我死都没结果
所以一下代码直接验证下结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package math; public class TestEuler2 { public static void main(String[] args) { long x=2682440L; long y=15365639L; long z=18796760L; long w=20615673L; System.err.println(x+ "的四次方是" +TestEuler.power4Long(x).toString()); System.err.println(y+ "的四次方是" +TestEuler.power4Long(y).toString()); System.err.println(z+ "的四次方是" +TestEuler.power4Long(z).toString()); System.err.println(w+ "的四次方是" +TestEuler.power4Long(w).toString()); System.out.println(TestEuler.checkEuler(x, y, z, w)); } } |
此代码结果如下
1 2 3 4 5 | 2682440 的四次方是 51774995082902409832960000 15365639 的四次方是 55744561387133523724209779041 18796760 的四次方是 124833740909952854954805760000 20615673 的四次方是 180630077292169281088848499041 true |
有人证明这个方程式有无穷的解,真是让人惊叹数学的深邃伟大。
以下测试运行用时
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package math; import java.math.BigDecimal; import java.util.function.BiConsumer; import org.jgroups.tests.perf.Data; /** * @author zxl * @jdk 1.8 * @Date 2016年10月13日上午10:04:24 */ public class TestEuler { public static void main(String[] args) { long currTime=System.currentTimeMillis(); boolean flg= true ; for ( long x= 1 ;flg&&(x<10L);x++){ for ( long y= 1 ;flg&&(y<x);y++){ for ( long z= 1 ;flg&&(z<y);z++){ for ( long w= 1 ; true ;w++){ int r=power4Long(w).compareTo(sum(power4Long(x),power4Long(y),power4Long(z))); System.out.print(x+ ":" +power4Long(x).toString()+ "," ); System.out.print(y+ ":" +power4Long(y).toString()+ "," ); System.out.print(z+ ":" +power4Long(z).toString()+ "," ); System.out.println(w+ ":" +power4Long(w).toString()+ ";" ); if (r== 1 ){ break ; } if (r== 0 ){ flg= false ; break ; } } } } } System.out.println( "用时共计:" +(System.currentTimeMillis()-currTime)); } public static boolean checkEuler( long x, long y, long z, long w){ return power4Long(w).compareTo(sum(power4Long(x),power4Long(y),power4Long(z)))== 0 ; } public static BigDecimal power4Long(Long b){ return power4( new BigDecimal(b)); } public static BigDecimal power4(BigDecimal b){ return b.multiply(b).multiply(b).multiply(b); } public static BigDecimal sum(BigDecimal... bs){ BigDecimal reB= new BigDecimal( 0 ); for (BigDecimal b:bs){ reB=reB.add(b); } return reB; } } |
该代码计算到10用时163毫秒,因为w在小于x的时候等式恒不成立
for(long w=x;true;w++)
所以w从x开始循环有效的降低了运行时间大概达到原先的四分之一耗时。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人