package algorithm;
import java.util.ArrayList;
/**
* 实现“挨拉托色尼的筛子”
* @author mike
*
*/
public class Sieve {
/**
* 输入:一个正整数,n>2
* 输出:包含所有小于等于n的质数的数组列表
* @param n
* @return
*/
public static ArrayList<Integer> sieve(int n) {
int[] A=new int[n+1];
ArrayList<Integer> result=new ArrayList<>();
//循环列出n以内大于1的整数,当成待筛选的数据
for (int i=2;i<=n;i++) {
A[i]=i;
}
for (int i = 2; i < (int )Math.sqrt(n); i++) {//i*i不会大于n,故n的开根号向下取整
if (A[i]!=0) {//i没有被前面的步骤消去
int j=i*i;
while (j<=n) {
A[j]=0;//该元素标记为消去
j=j+i;
}
}
}
//将剩余的元素复制到result数组列表中
for (int i = 2; i <= n; i++) {
if (A[i]!=0) {
result.add(A[i]);
}
}
//返回result数组列表
return result;
}
public static void main(String[] args) {
ArrayList<Integer> result=sieve(12);
System.out.println("result的大小:"+result.size());
for (int i = 0; i < result.size(); i++) {
if (i%5==0) {
System.out.println();
}
System.out.print(result.get(i)+"\t");
}
}
}
实现“挨拉托色尼的筛子”
最新推荐文章于 2024-04-19 10:57:44 发布