埃氏筛法求素数
用“埃氏筛法”求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 }