Java計算素數

1 什麼是素數

素數又稱質數,指的是,除了1和它本身,沒有第三個數能夠整除它。
例如:

  • 2:只能夠被1和2整除,質數
  • 3:只能夠被1和3整除,質數
  • 4:能夠被1、2、4整除,除了1和本身4,還有2,所以不是質數

注意:1本身只能夠被1整除,不算質數。


2 如何計算

根據質數(素數)的定義不難得出,要計算一個數是不是質數,需要明確是不是除了1和本身以外,還有其他除數。由此可以有一個計算思路:

  • 給定一個數值n
  • 從1到他本身之間循環i,用n去除i
  • 除盡的話,判斷i是否是本身或是1
  • 若是1,繼續循環計算
  • 若是本身,則是質數。
  • 中間有能夠整除n的數,則n不是質數

大致流程圖如下:

Created with Raphaël 2.1.0開始數值:nfor(int i=1;i<n;i++)n % i == 0?i==1/i==n?結束yesno

3 Java代碼實現

根據上面流程圖分析,下圖爲計算代碼:

/**
     * 判斷一個數是不是質數
     * @param number
     * @return
     */
    public static boolean isPrime(int number){
        if(number<2){//若此數小於2,則不是質數
            return false;
        }
        //從1-number本身循環取餘計算
        for(int i=1;i<number;i++){
            if(number % i == 0){//餘數爲0,能整除
                if(number == i){//是否是本身
                    return true;
                }else if(i!=1){//是否是1
                    return false;
                }
            }
        }
        return true;
    }

判斷素數的方法已經寫出來,可以利用這個方法做其他運算,下面有一些計算示例:

3 計算一段範圍內的素數

打印出n~m區間,所有的素數:

public static void getPrimeNumber(int start,int end){
        int primArr[] = new int[end-start];//用數組存素數,範圍在給出的範圍之內,使用集合會更加合理
        if(end<start){//判斷參數有效性
            System.out.println("輸入參數有誤!");
        }else{
            int index = 0;//數組下標,
            for(int i = start;i<=end;i++){
                if(isPrime(i)){//判斷是否質數
                    primArr[index] = i;
                    index ++;
                }
            }
        }
        if(primArr.length>0){//打印數組
            for(int i=0;i<primArr.length;i++){
                System.out.println(primArr[i]);
            }
        }
    }

4 計算前m個素數

    /**
     * 打印出前m個素數
     * @param m
     */
    public static void getTopPrime(int m){
        int primArr[] = new int[m];
        if(m<1){
            System.out.println("輸入有誤!");
        }else{
            int num = 0;//要計算的數
            int index = 0;//第幾個質數
            while(index < m){//數量不到m個一直循環
                num++;//自增,不斷計算
                if(isPrime(num)){
                    primArr[index] = num;
                    index++;
                }
            }
        }
        if(primArr.length>0){
            for(int i=0;i<primArr.length;i++){
                System.out.println(primArr[i]);
            }
        }
    }

5 總結

計算素數最重要的思想在於,不在乎這個數到底有幾個除數,把小於這個數的所有數循環除一遍,比較,既可以得出結論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章