<!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