在限制下添加质数
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 等。
- 你可以注释掉 continue 来退出无限循环。
我可以看到值 3 在素数列表中重复,你可以注释掉这些行
// if(Number % 2 != 0)
// primes.add(Number);
</pre>
我想在 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 等。
- 你可以注释掉 continue 来退出无限循环。
我可以看到值 3 在素数列表中重复,你可以注释掉这些行
// if(Number % 2 != 0) // primes.add(Number); </pre>