Java 如何减少Q12项目的运行时间
我的代码运行时间太长。我试着做的是一路循环到一个大数字,然后循环ip到它,找到它的和,然后循环检查除数。我如何优化它Java 如何减少Q12项目的运行时间,java,Java,我的代码运行时间太长。我试着做的是一路循环到一个大数字,然后循环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; w
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;
}
}
}
}
}
公共类Q12
{
公共静态void main(字符串[]args)
{
int-answer=5;
布尔检查=假;
整数和=0;
int计数器=0;
int kk=0;
while(check==false)
{
循环:
对于(int i=1;i
你的代码应该做什么并不明显,所以我怀疑我能在那里优化什么
这部分:
check=true;
break loop;
中断执行并跳转到
loop:
for(int i=1;i<50000000;i++)
您可以使用缓存。例如:
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[]precalc=新长[50000000];
int-answer=5;
布尔检查=假;
整数和=0;
int计数器=0;
int kk=0;
while(check==false)
{
循环:
对于(int i=1;使用一些数学进行优化,例如,a和b之间的所有整数值之和应该很容易计算,无需循环。每次循环i
时,您都从0
重新计算总和,只需将其存储在循环外,并在每次循环迭代时添加i
。此外,您不需要启动de>i
at1
。有更有效的方法来获取数字的因子,而不是逐个进行测试。例如,如果您知道2
是一个因子,那么您也会知道n/2
是一个因子。此外,您可以在sum/2
处停止k
,因为这是可能的最大因子(不包括号码本身)。
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;
...