使用筛法求N以内的素数,从2开始,不断剔除2的倍数,然后从剩下的数字中,选择最小的数3(这个数一定会是素数),然后剔除所有3的倍数,依次类推,最后剩下的数就全是素数了。
public class Prime {
// 返回n以内的素数列表
public static int[] getPrimes(int n) {
int[] a = new int[n];
for(int i = 2; i < n; i ++) {
a[i] = i;
}
// 筛法
for(int i = 2; i < n; i ++) {
if (a[i] != 0) {
for(int j = i * 2; j < n; j = j + i) {
a[j] = 0;
}
}
}
int count = 0;
for(int i = 2; i < n; i++) {
if (a[i] != 0) {
count ++;
}
}
if (count > 0) {
int[] primes = new int[count];
int j = 0;
for (int i = 2; i < n; i ++) {
if(a[i] != 0) {
primes[j] = a[i];
j ++;
}
}
return primes;
}
return null;
}
public static void main(String[] args) {
int[] a = getPrimes(10);
for (int i = 0; i < a.length; i ++) {
System.out.println(a[i]);
}
System.out.println();
}
}