埃氏筛法求素数

用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。

要求使用数组及增强的for语句。

 

代码:

 1 import java.util.ArrayList;
 2 
 3 public class FindPrim {
 4     public static void main(String[] args) {
 5         //思路:使用从0-100的一个数组,每个下标代表一个数,用值非0来代表该下标代表的数是素数
 6         //使用一个循环,从2起往后遍历,遇到的每个素数都用它来筛选一遍数组,将所有它的倍数的置为0
 7 
 8         //下面数组会自动初始化为0
 9         int[] arr = new int[101];
10 
11         //将数组从2-100,都假设为素数,用1表示
12         for (int i = 2; i<=100; i++){
13             arr[i] = i;
14         }
15 
16         int p,q;
17         //从前往后遍历,每遇到一个新的最小素数,就将其所有倍数都标记为非素数(自身除外)
18         for (int i = 2; i <= 100; i++){
19             //若是素数,则进入筛选流程
20             if (arr[i] != 0){
21                 //倍数从2倍起,q是倍数,p是乘积
22                 for (q=2; (p=q*i) <= 100; q++){
23                     arr[p] = 0;
24                 }
25             }
26         }
27 
28         //使用增强for输出
29         for(int i : arr){
30             if (i != 0){
31                 System.out.print(i + " ");
32             }
33         }
34     }
35 }
View Code

 

posted @ 2019-05-20 15:53  玉树临风帅哥  阅读(1136)  评论(0编辑  收藏  举报