1 package com.jdk7.chapter4; 2 3 public class PrimeNumber { 4 public void getPrime(int range){ 5 boolean[] sourceData = this.isPrime(range); 6 7 if(!(sourceData==null)){ 8 int size = sourceData.length; 9 Integer[] resultData = new Integer[size]; 10 //number定义要放在自增运算循环外,否则可能达不到预期效果 11 int number = 0; 12 for(int i=1;i<size;i++){ 13 if(sourceData[i]){ 14 resultData[i] = i; 15 System.out.print("素数["+i+"] :"+resultData[i].toString()+" "); 16 if(++number % 10 == 0){ 17 System.out.println(); 18 } 19 } 20 } 21 System.out.println(); 22 System.out.println("质数总个数为: "+number); 23 } 24 } 25 26 private boolean[] isPrime(int range){ 27 boolean[] tag = new boolean[range+1]; 28 if(range<=0){return null;} 29 for(int i=1;i<range+1;i++){ 30 if(i==1){ 31 tag[i] = false; 32 }else{ 33 tag[i] = true; 34 } 35 } 36 //假设tag[i]为质数,则质数的倍数一定为非质数 37 int sqrt = (int)Math.sqrt(range); 38 for(int i=1;i<=sqrt;i++){ 39 if(tag[i]){ 40 for(int j=(2 * i);j<=range;j+=i){ 41 tag[j] = false; 42 } 43 } 44 } 45 return tag; 46 } 47 }
1 package com.jdk7.chapter4; 2 3 public class PrimeNumberTest { 4 public static void main(String[] args) { 5 PrimeNumber pn = new PrimeNumber(); 6 int range = 100; 7 pn.getPrime(range); 8 } 9 } 10 11 执行结果: 12 素数[2] :2 素数[3] :3 素数[5] :5 素数[7] :7 素数[11] :11 素数[13] :13 素数[17] :17 素数[19] :19 素数[23] :23 素数[29] :29 13 素数[31] :31 素数[37] :37 素数[41] :41 素数[43] :43 素数[47] :47 素数[53] :53 素数[59] :59 素数[61] :61 素数[67] :67 素数[71] :71 14 素数[73] :73 素数[79] :79 素数[83] :83 素数[89] :89 素数[97] :97 15 质数总个数为: 25