筛选法求素数

package 素数总结;

import java.util.Arrays;

/** 
 * @author wangpei 
 * @version 创建时间:2017年8月15日 下午9:16:18 
 * 求1-n间的素数个数
 * 素数:只有1和他本身两个因子的数字
 * 不包含1
 * 
 * 筛选法:若一个数是素数,则其倍数必不是素数,标记其倍数为非素数,最终得到的未被标记的即为素数
 */
public class 求素数的个数 {
    public static void main(String[] args) {
         test1(10);

    }
    public static void test1(int n){
        int []flag=new int[n+1];
        Arrays.fill(flag, 0);
        flag[0]=1;
        flag[1]=1;
        for (int i = 2; i < n+1; i++) {
            if(flag[i]==0){
                for(int j=i;i*j<n+1;j++)
                    flag[i*j]=1;
            }

        }
        for (int i = 0; i < n+1; i++) {
            if(flag[i]==0)
                System.out.print(i+" ");

        }

    }

}

还有一种比较笨的办法就是,判断n是不是素数,判断2到根号下n是不是整除n,若存在整除的,则非素数

posted @ 2017-08-15 22:44  多巴胺二次元式  阅读(150)  评论(0编辑  收藏  举报