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();}}