在限制下添加素数

时间:2017-02-02 02:04:19

标签: java primes

我想添加两百万以下的素数,并且出于某种原因,它一直在没有输出的情况下运行。经过一些测试后,我知道错误本身在addprimes函数中,但据我所知,程序应返回输出。

static ArrayList<Integer> primes = new ArrayList<Integer>();

public static void findPrimes(int limit)
{
    primes.add(2);
    int Number = 3;
    int n = 0;
    boolean add = true;

    if(Number % 2 != 0)
        primes.add(Number);

    for(int i = Number; i<limit; i+=2)
    {
        n = 2;
        add = true;


        while(n < i)
        {
            if(i % n == 0)
            {
                add = false;
                continue;
            }
            n++;
        }


        if(add == true)
            primes.add(i);

    }
}


public static int addPrimes()
{
    int Total = 0;
    int temp = 0;
    for(int i = 0; i < primes.size(); i++)
    {
        temp = primes.get(i);
        Total += temp;
    }
    return Total;

}
}

2 个答案:

答案 0 :(得分:0)

您调用continue时不会增加n的值。

尝试将while循环更新为以下内容:

while(n < i)
{
   if(i % n == 0)
   {
       add = false;
       n++;
       continue;
   }
   else
       n++;
}

查看this question的答案,了解有关continue

的更多信息

<强>更新

如果您的代码结果太大,那么您必须使用其他数据类型,如Long,Double ..etc。

答案 1 :(得分:0)

  1. 你可以注释继续走出无限循环。
  2. 我可以看到值3在素数列表中重复,您可以注释掉这些行

    
    //    if(Number % 2 != 0) 
    //          primes.add(Number);