为什么这个简单的 javascript 代码不起作用?

Why isn't this simple javascript code working?

代码应该检查前几个三角数是否为素数(它们不是),但它没有运行。

<!DOCTYPE HTML>
<html>
<head><title>C1E9P1</title>
<script>

for(i = 3; i < 13; i++){
    prime = true;
    n = (i*(i+1))/2;
    for(i = 2; i < Math.sqrt(n)+1; i++){
        if(n%i == 0){
            prime = false;
        }
    }
    if(prime){
        document.write(n+" is prime.");
        document.write("<br>");
    } else {
        document.write(n+" is composite.");
        document.write("<br>");
    }
}


</script>
</head>
</html>

您为嵌套的两个 for 循环使用了相同的变量!

for(i = 3; i < 13; i++){  <-- i
    for(i = 2; i < Math.sqrt(n)+1; i++){ <-- i

修改了脚本,不知道算法是否正确

for(var i = 3; i < 13; i++){
    var prime = true;
    var n = (i*(i+1))/2;
    for(var j = 2; j < Math.sqrt(n)+1; j++){
        if(n%j == 0){
            prime = false;
        }
    }
    if(prime){
        document.write(n+" is prime.");
        document.write("<br>");
    } else {
        document.write(n+" is composite.");
        document.write("<br>");
    }
}

试试这个并查看您的 JavaScript 控制台:

for(var i = 3; i < 13; i++){
    var prime = true;
    var n = (i*(i+1))/2;
    for(var j = 2; j < Math.sqrt(n)+1; j++){
        if(n%j == 0){
            prime = false;
        }
    }
    if(prime){
        console.log(n+" is prime.");
        console.log("<br>");
    } else {
        console.log(n+" is composite.");
        console.log("<br>");
    }
}

您应该将内部 for 循环的变量名更改为 i 以外的其他名称。

for(i = 3; i < 13; i++){
  prime = true;
  n = (i*(i+1))/2;
  for(j = 2; j < Math.sqrt(n)+1; j++){
    if(n%j == 0){
        prime = false;
    }
}

在那之后你应该一切都好。