2015-01-04 2 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(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; 
    } 
} 

После этого вы должны быть хорошими.

Смежные вопросы