JS实现正整数分解质因数。例如:输入90,打印出90=2*3*3*5

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 15、将一个正整数分解质因数。例如:输入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

猜你喜欢

转载自www.cnblogs.com/JShyf/p/12112641.html