題目:題目:將一個正整數分解質因數。例如:輸入90,打印出90=2 * 3 * 3 * 5。
題目分析:
如果n爲素數直接打印 n = n
如果不爲素數:
- 定義一個i爲最小素數,str爲打印的字符串。
- 如果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;
}