厄拉多塞筛算法是一种用于计算小于N的所有素数的方法。我们从制作整数2到N的表开始。我们找出最小的为被删除的整数i,打印i,然后删除i,2i,3i,……。当i>N1/2时,算法终止。Java代码实现如下:
/**
* @author jack
* 厄拉多噻筛是一种用于计算小于N的所有素数的方法。我们从制作整数2到N的表开始。
* 我们找出最小的为被删除的整数i,打印i,然后删除i,2i,3i,……。当i>N的平方根时。算法终止,
* 该算法的时间复杂度是NloglogN.
*/
package com.dlut.erastothenes;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.sun.org.apache.bcel.internal.generic.AALOAD;
public class Erastothenes {
@Test
public void run()
{
erastothenes(200);
}
public void erastothenes(int maxN)
{
int tem = 0;
int[] num = new int[maxN];
for (int i = 1; i < num.length+1; i++) {
num[i-1] = i;
}
final double sqrtN = Math.sqrt(num.length+1);
for (int i = 1; i +1< sqrtN; i++)
{
if (num[i]!= 0 )
{
for (int j = 2;; j++) {
tem = j*num[i]-1;
if (tem<num.length ) {
num[tem]=0;
}
else {
break;
}
}
}
else {
continue;
}
}
for (int i = 0; i < num.length; i++) {
if (num[i]!= 0 ) {
System.out.println(num[i]);
}
}
}
}