我在Java中为Project Euler编写代码(http://projecteuler.net/)。我对Java编码很新,所以我只讨论问题#12,它要求你找到超过500个因子的最小三角形数(例如,1 + 2 + 3 + 4 + 5)。我为它编写了代码,但由于某些原因,我的代码一直挂起:
int factors = 0;
long triangle = 0L;
for(int x = 1; factors <= 500; x++){
triangle += x;
for(int y = 1; y<=triangle; y++){
if(triangle%y==0){
factors = factors + 1;
}
}
if(factors > 500){
System.out.println(triangle);
}
else{
factors = 0;
}
}
为方便空间,我没有包括班级或主要。该程序没有编译时错误,但我无法弄清楚为什么它没有产生答案。
感谢您的帮助
答案 0 :(得分:3)
你的程序实际上并没有挂起;这真的很低效。
由于这是Project Euler问题,我不会直接给你一个更优化的解决方案。我会告诉你的是那个
for(int y = 1; y<=triangle; y++){
if(triangle%y==0){
factors = factors + 1;
}
}
是需要更快的部分。您不需要实际循环遍历小于triangle
的每个数字。如果triangle
是数百万(作为示例),则会增加计算所需的计算量。你怎么能更快地得到多少因素?