2015-01-04 128 views
-4

该代码应该检查前几个三角形数字是否为素数(它们不是),但它不会运行。为什么不是这个简单的JavaScript代码工作?

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

什么是不工作?是否有错误讯息? – Codor

+0

我尝试在浏览器中运行它,但它只加载。 – 788

+0

那么在控制台中是否有任何错误? – Doorknob

回答

5

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

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

谢谢你,现在完美的作品。 – 788

1

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

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>"); 
    } 
} 
2

试试这个,看看你的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>"); 
 
    } 
 
}

1

你应该内部for循环的变量名称更改为我别的以外的东西。

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; 
    } 
} 

之后你应该都很好。

相关问题