Вывести первые N (N<5) совершенных чисел на экран

smdb

Прошу помочь найти ошибку в решении данной задачи. Формулировка такова: Натуральное число называется совершенным, если оно равно сумме всех своих делителей, включая единицу. Вывести первые N (N<5) совершенных чисел на экран. Решение:
<HTML>
<HEAD>
<TITLE>Поиск натуральных чисел</title>
<SCRIPT LANGUAGE="javaScript">
<!--
 
function f()
 
{
n=parseInt (document.form1.CHISLO1.value);           <!--цикл от первого совершенного до 5-го -->
for (i=6;i<=33550336;i++)
{
  k=0;                            <!--сумма делителей каждого числа -->
  kol=0;                           <!--количество чисел ,которые попытаемся вывести -->
  st="";                            <!--строка,которую в конце выведем -->
  for (j=1;j<=i;j++)                <!--проверяем какие делители -->
  {
      if (i%j==0) k=k+j;kol++;      <!--если делитель(остаток равно 0) то суммируем делители,добовляем кол-во -->
  }
if (k=i) && (kol<=n) st=st+i+" "; <!--если число совершенное(сумма делителей=самому числу) и кол-во чисел <= введенному -->
}                                 <!--то прибавляем это число к строке -->
 
document.form1.CHISLO2.value = st;                        <!--выводим полученную строку со всеми числами -->
 
 
}
-->
 
</SCRIPT> 
</HEAD>
<BODY>
 
<H1><Center>Задача № 1.7</H1>
<H2><Center>Выберем первые N совершенных чисел</H2>
<FORM name="form1">
 
 
<h1><Center>Задайте количество чисел (n<5): <INPUT TYPE=TEXT NAME=CHISLO1 maxlength=1><BR>
<center><INPUT TYPE=BUTTON VALUE=Вывести ONCLICK="f();"</center>
<font color=red>
 
<center>Ответ: <INPUT TYPE=TEXT NAME=CHISLO2><BR>
  </FORM></center>  
</BODY>
</HTML>
3 ответа

smdb

for (j=1;j<=i;j++)                <!--проверяем какие делители -->
  {
      if (i%j==0) k=k+j;kol++;      <!--если делитель(остаток равно 0) то суммируем делители,добовляем кол-во -->
  }
Может все-таки j строго меньше i? А то ж получается, что в делителях само число и единица в любом случае. И оно будет больше числа заданного.


smdb

Даже если строго. Программа все равно не работает


smdb

if (i%j==0) k=k+j;kol++;
Тут еще после условия фигурные скобки поставить попробуйте.