<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
// 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5
// 加入這輸入 90
var a = Number(prompt());
var c = "";
var d = a;
for (var b = 2; b <= a; b++) {
// 判斷a%b === 0;
if (a % b === 0 && a !== b) {
/*
每次a%b能整除的數存到c里面 90/2=45 45/3=15 15/3=5 5/5=1 c的值就 2 3 3
a!==b 因5/5 a=5 b=5;;所以不會存這個5
為啥要 a !== b
因這樣寫結果就為
90 = 2*3*3*5*
5后面這個*不對勁了吧
5就要單獨輸出
*/
c += b + "*";
/*
這個a /= b; 相當於每次 a= a / b
90/2=45 ? = 90 / 2
45/3=15 ? = 90 / 2 / 3
15/3=5 ? = 90 / 2 / 3 / 3
5/5=1 ? = 90 / 2 / 3 / 3 / 5
*/
a /= b;
/*
起始 b = 2
b每次加1 2 3 4 5 6 7 8 9一直到<=a;
但 90 = 2 * 3 * 3 * 5 所以 兩 個 3 是怎么得到的
循環第一回 b = 2;
90 / 2 = 45(可以整除)
循環第二回 b = 3
45 / (2 - 1 = 1) (不能整除)
45 / (1 + 1 = 2 ) (不能整除)
45 / (2 + 1 = 3) = 15 (可以整除)
循環第三回 b = 3
15 / (3 - 1 = 2) (不能整除)
15 / (2 + 1 = 3) = 5 (可以整除)
以此類推
但上面有個條件
a !== b
最后是不是 5 / 5
看到此步驟看上面a !== b的解釋
*/
b--;
/*
這里就單獨輸出a === b 5 / 5
這是 a的值就直接按上面的數值來 也就是循壞第三回的值 15 / (2 + 1 = 3) = 5
*/
}else if (a === b){
// 這個c就是存起來a / b 能整除a,b的值(2 3 3 5)
c += b;
// 滿足a === b 就停止 5 / 5 = 1 1不是分解質因數
break;
}
}
console.log(d+"="+c);
</script>
</body>
</html>
90=2*3*3*5