【发布时间】:2014-03-23 05:20:00
【问题描述】:
该函数接受一个整数 N。该函数必须打印从 2 到 N 的所有素数(包括 N,如果 N 本身是一个素数)。
我有这个函数并且它运行了,但是它跳过了一些素数,甚至包括一些偶数,比如 8。我似乎找不到导致这种情况的错误。
我的代码如下所示:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class PrimeNumbers {
List <Integer> primeList = new ArrayList<Integer>();
public ArrayList<Integer> findPrimes(int n){
if(n == 2){
primeList.add(n);
}
else{
//should I have i=i+2 instead of i++ to move faster?
//If so, by doing this, it causes weird and different
//output when running
for(int i=2; i<=n; i++){
if(n%i != 0){
primeList.add(i);
}
}
}
return (ArrayList<Integer>) primeList;
}
public static void main(String[] args) {
PrimeNumbers pn = new PrimeNumbers();
System.out.println(pn.findPrimes(15));
}
}
【问题讨论】:
-
你的逻辑有问题,你只需从 2 迭代到 n 一次,但你应该有一个函数来检查数字是否为素数,并在循环中调用该函数。
-
我想要一个接收数字 N 并返回从 2 到 N 的所有素数组成的数组。
-
创建一个函数来检查数字是否为素数,并返回布尔值 true 或 false。通过传递循环计数器作为参数在循环中调用该函数,如果函数返回 true,则将该数字添加到数组列表中
-
您的算法不正确。如果它是素数,您必须检查每个“i”,但您要检查“n”是否可以被每个“i”整除。向 google 询问“prime sieve”,您将获得一个高效且有效的算法。
-
只要在纸上做两个数字,你就会明白为什么你所做的与质数完全无关。您所做的就是找到
n的所有非因数。
标签: java arrays arraylist primes