一个大于1的自然数,除了1和它本身外,不能被整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数;
现在要求N以内的所有质数,方法很多,我的理解是
质数是构成一切数字的因子,每个数字必定至少有一个质数因子。所以只要以2为起点开始筛选,将2的倍数全部剔除,然后接着2下面的一个没有被剔除的数3开始做同样的工作,然后以此类推。
代码如下:
public class Eratosthenes {
public void primenumber(final int N){
int i,j;
int[] prime=new int[N+1];
for(i=2;i<=N;i++){
prime[i]=1;
}
for(i=2;i*i<=N;i++){
if(prime[i]==1){
for(j=2*i;j<=N;j++){
if(j%i==0)
prime[j]=0;
}
}
}
for(i=2;i<=N;i++){
if(prime[i]==1){
System.err.print(i+"\t");
}
if(i%16==0)
System.out.println();
}
}
public static void main(String[] args) {
new Eratosthenes().primenumber(1009);
}
}