Неправильный вывод чисел

177
09 мая 2022, 15:50

с помощью js нужно найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N, N вводим сами

В моем коде, получается, мы добавляем к счетчику +1, когда находим его делитель и должно выводиться по итогу само число, у которого N делителей, но у меня выводится почему-то только число 200... В чем может быть проблема?

function vtoroe()
{   
    var countt;
    var temp;
    var N = document.getElementById("N").value; //считывание N
    for (var i = 1; i<=200; i++) 
    {   
        temp=0;
        countt = 0; 
        for (var j = 1; j<=200; j++) 
        {
            if (i%j == 0 ) //проверка на делимость числа без остатка
            {
                countt++;
            } 
            if (countt == N)
            {   
                temp=i;
                document.getElementById('otvet2').value=temp+', '; //вывод числа, если его счетчик равен N
            }
        }
    }
} 
Answer 1

ваша проблема в том, что вы недосчитываете делители до конца и уже делаете какие-то выводы, т.е. у числа может быть больше N делителей, но вы уже на N делителях начинаете что-то считать

вместо

    for (var j = 1; j<=200; j++) 
    {
        if (i%j == 0 ) //проверка на делимость числа без остатка
        {
            countt++;
        } 
        if (countt == N)
        {   
            temp=i;
            document.getElementById('otvet2').value=temp+', '; //вывод числа, если его счетчик равен N
        }
     }

надо бы

    for (var j = 1; j<=200; j++) 
    {
        if (i%j == 0 ) //проверка на делимость числа без остатка
        {
            countt++;
        }
    }
    if (countt == N)
    {   
        temp=i;
        document.getElementById('otvet2').value=temp+', '; //вывод числа, если его счетчик равен N
    }

кроме того, почему бы вам сначала не найти все делители и занести их в массив, а уже потом вывести в том или ином виде

let arr = [];
for (let i = 1; i <= 200; j ++)
{
    for (let j = 1; j<=200; j++) 
    {
        if (i % j == 0 ) //проверка на делимость числа без остатка
        {
            countt++;
        }
    }
    if (countt == N)
    {   
        arr.push(i);
    }
}
const str = arr.join(', ');
document.querySelector('#otvet2').value = str;
Answer 2
document.getElementById('otvet2').value = document.getElementById('otvet2').value + temp + ', ';
Answer 3

let count = 0;
for (let i = 1; i <= 200; i++) {
  for (let j = 1; j <= 200; j++) {
    if (i % j == 0) {
      count++;
    }
  }
}
console.log('count: ', count);

Answer 4
document.getElementById('otvet2').value=temp+', '; 

К примеру здесь правильные ответы это 50, 100 и 200 и происходит следующие

temp = 50
value = temp + ", " = "50, " 
temp = 100
value = temp + ", " = "100, "
temp = 200
value = temp = ", " = "200, " 

то есть у вас value не дополняется а полностью заменяется

READ ALSO
Перевести js в php

Перевести js в php

Всем привет! У меня есть массив с объектами (data), также есть функция, которая выводить разметку и элементами из объектов внутри массиваМне...

302
Скрипт заблокирован политикой CORS

Скрипт заблокирован политикой CORS

В расширении для Chrome я пытаюсь загрузить некоторый скрипт с помощью XMLHttpRequest, но получаю следующую ошибку:

259
Vue обработка событий

Vue обработка событий

Не пойму что не такпостараюсь как можно подробнее объяснить

289
долгий ответ от стороннего API

долгий ответ от стороннего API

Я получаю API от сторонних сервисов на PHP, процесс занимает некоторое времяМетод получения API вызывается AJAX запросом из вьюшки

163