我的代码运行时间过长。我试图做的是一直循环到一个大数字,然后循环ip到它找到它的总和然后循环检查除数。我如何优化它?
public class Q12
{
public static void main(String[] args)
{
int answer=5;
Boolean check=false;
int sum=0;
int counter=0;
int kk=0;
while(check==false)
{
loop:
for(int i=1;i<50000000;i++)
{
sum=0;
counter=0;
for(int j=0;j<i;j++)
{
sum=j+sum;
}
for(int k=1;k<sum;k++)
{
if(sum%k==0)
{
counter=counter+1;
}
}
if(counter>=501)
{
check=true;
break loop;
}
}
}
}
}
由于
答案 0 :(得分:0)
你的代码应该做什么并不明显,所以我怀疑我能在那里优化什么......
这部分:
check=true;
break loop;
中断执行并跳转到
loop:
for(int i=1;i<50000000;i++)
在已经评估check
之后,将再次运行50000次迭代的内循环。这是预期的行为吗?
下面:
sum=0;
counter=0;
for(int j=0;j<i;j++)
{
sum=j+sum;
}
您可以使用缓存。像:
long[] precalc = new long[50000000];
int answer=5;
Boolean check=false;
int sum=0;
int counter=0;
int kk=0;
while(check==false)
{
loop:
for(int i=1;i<50000000;i++)
{
sum = precalc [i];
if (sum == 0) {
precalc[i] = sum = (precalc[i - 1] + i);
}
counter=0;
...
另外,我建议您使用long
- s代替int
- s,因为可能存在算术溢出。