在限制下添加质数

Adding prime number under a limit

我想在 200 万以下添加素数,但由于某种原因,它 运行 没有输出。经过一些测试后,我知道错误本身在 addprimes 函数中,但是根据我的理解,程序应该 return 输出。

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;

}
}

您调用 continue 没有增加 n 的值。

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

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

查看 this question 的答案以获取有关 continue 的更多信息。

更新

如果您的代码以太大的数字结尾,那么您必须使用另一个 data-types,例如 Long、Double 等。

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

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