如何减少运行时间Q12 Project Euler

时间:2016-01-28 12:18:29

标签: 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;
        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;
                }


            }


        }



    }

}

由于

1 个答案:

答案 0 :(得分:0)

  1. 你的代码应该做什么并不明显,所以我怀疑我能在那里优化什么......

  2. 这部分:

    check=true;
    break loop;
    

    中断执行并跳转到

    loop:
    for(int i=1;i<50000000;i++)
    

    在已经评估check之后,将再次运行50000次迭代的内循环。这是预期的行为吗?

  3. 下面:

    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;
    
            ...
    
  4. 另外,我建议您使用long - s代替int - s,因为可能存在算术溢出。

相关问题