package com.test_java; import java.util.Arrays; public class Prime { /* * **求N以内的质数 */ int N; int i,j; Prime(int inputN){ this.N = inputN; } //普通试除法 private void comPrime1_1(){ System.out.println("小于" + N + "的质数有:"); for(i=N;i>=0;i--){ for(j=i-1;j>=2;j--){ if(i%j==0){ break; } if(j<=2) System.out.println(i); } } System.out.println(2); } //循环到sqrt(N)即可,简单解释一下:因数都是成对出现的。比如,100的因数有:1和100, //2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开 //平方,另一个大于等于100的开平方。 private void comPrime1_2(){ System.out.println("小于" + N + "的质数有:"); for(int i=N;i>=0;i--){ for(int j=2;j<=(int)Math.sqrt(i);j++){ if(i%j==0) break; if(j == (int)Math.sqrt(i)) System.out.println(i); } } } //筛选法 private boolean[] filterNumber(int num){ if(num<=0){ System.out.println("范围必须大于0"); return null; } boolean[] isPrime = new boolean[num + 1]; isPrime[1] = false; Arrays.fill(isPrime,2,num,true); int n = (int)Math.sqrt(num); for(int i=1;i<n;i++){ if(isPrime[i]){ for(int j=2*i;j<=num;j+=i){ isPrime[j]= false; } } } return isPrime; } private void comPrime2(){ boolean[] primes= filterNumber(N); int num=0; if(primes!=null){ for(int i=1;i<primes.length;i++){ if(primes[i]){ System.out.println(i+" "); if(++num%10==0) System.out.println(); } } System.out.println(); } System.out.println("一共有"+num+"个质数"); } public static void main(String[] argc){ Prime prime = new Prime(100); prime.comPrime2(); } }