Java 算法訓練 分解質因數(超詳細)

題目:題目:將一個正整數分解質因數。例如:輸入90,打印出90=2 * 3 * 3 * 5。

題目分析:
如果n爲素數直接打印 n = n
如果不爲素數:

  1. 定義一個i爲最小素數,str爲打印的字符串。
  2. 如果n能整除i,則i是n的因素,令n=n/i,i加入到str中 ;如果n不能整數i,則i++,直到能整除爲止;當n=1時跳出循環打印str(具體看代碼中實現)。

輸入格式:輸入兩個數表示分解質因素的範圍。
輸出格式:輸出範圍內的分解質因數的格式

例如:
輸入:
在這裏插入圖片描述
輸出:
在這裏插入圖片描述
代碼如下:

 public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int z = scanner.nextInt(); // 輸入範圍的最小值
            int y = scanner.nextInt(); // 輸入範圍的最大值
            for (int i = z; i <= y; i++) {
                if (issushu(i)){
                    System.out.println(i+"="+i); // 如果爲素數 直接輸出i = i
                }else { // 如果不是素數
                    System.out.println(i+"="+heshu(i));
                }
            }
        }


        static String heshu(int num){ // 分解質因素
            String str = "";
            int i = 2; // i爲最小的質數2
            while (num!=1){ // 當num不爲1是一直分解
                if (issushu(i)&&num%i==0){ //首先判斷i是不是素數,如果是,i就是num的因素,將i加到字符串中。 
                    str = str +"*"+ i;
                    num = num/i;
                }else { // i不爲素數時,i++
                    i++;
                }
            }
            return str.substring(1); // 第一個字符爲"*" 所以從第二個字符截取
        }

        public static boolean issushu(int n){ // 判斷是否爲素數
            if (n==2||n==3){
                return true;
            }
            if (n%2==0){  //  是偶數就一定不是素數
                return false;
            }

            for (int i=3;i<=(int)Math.sqrt(n);i=i+2){ // 奇數+1爲偶數,所以每次循環+2
                if (n%i==0) {return false;}
            }
            return true;
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章