evgeniy8705
@evgeniy8705
Повелитель вселенной

Как понять решение задачи на JS?

Изучаю учебник на learn.javascript.ru
задача:
Создать список последовательных чисел от 2 до n: 2, 3, 4, ..., n.
Пусть p=2, это первое простое число.
Зачеркнуть все последующие числа в списке с разницей в p, т.е. 2p, 3p, 4p и т.д. В случае p=2 это будут 4,6,8....
Поменять значение p на первое незачеркнутое число после p.
Повторить шаги 3-4 пока p2 < n.
Все оставшиеся незачеркнутыми числа - простые.
Дошел до массивов. Решаю задачи в конце...Одну из них не смог решить и посмотрел решение. Начал разбирать. все понял, но момент когда считается сумма незачеркнутых чисел не понятен. Как я понял то в конце считается не сумма чисел а их количество. Разъясните почему все таки считается сумма чисел.
var arr = [];

for (var i = 2; i < 100; i++) {
	arr[i] = true
}

var p = 2;

do {
	for (i = 2 * p; i < 100; i = i + p) {
		arr[i] = false;
	}

	for (i = p + 1; i < 100; i++) {
		if (arr[i]) break;
	}

	p = i;
} while (p * p < 100);




var sum = 0;

for (i = 0; i < arr.length; i++) {
	if (arr[i]) {
		sum += i;
	}
}

console.log(sum);
  • Вопрос задан
  • 2843 просмотра
Решения вопроса 1
hedint
@hedint
Senior front-end developer
Вот вам комментарии :)
var arr = [];
    //Заполним массив
    //изначально примем, что все числа от 2 до 100 - простые
    //обратите внимание, что наши числа хранятся в индексе массива, а не в значении.
    //в значении хранится статус, true - простое, false - не простое.
    for (var i = 2; i < 100; i++) {
        arr[i] = true
    }

    var p = 2; // первое простое число

    //начинаем отсеивать все не простые числа
    do {
        //"зачеркиваем" числа по правилу в задаче - отсеиваем не простые числа с шагом в p
        for (i = 2 * p; i < 100; i = i + p) {
            arr[i] = false;
        }
        //ищем следующее незачеркнутое число
        for (i = p + 1; i < 100; i++) {
            if (arr[i]) break;
        }


        p = i;
    } while (p * p < 100);

    //тут у нас уже сформирован массив, index=>value, где index - наши числа от 2 до 99, а value - флаг, простое ли у нас число (true) в index или нет (false).


    var sum = 0;
    
    //соответственно, мы считаем сумму индексов массива, в которых у нас записаны простые числа
    for (i = 0; i < arr.length; i++) {
        //проверим, простое ли число. если простое - суммируем.
        if (arr[i]) {
            sum += i;
        }
    }

    console.log(sum);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Потому что ключ это число а значение массива по этому ключу - флаг, указывающий на то, "вычеркнуто" число или нет. Грубо говоря это не массив хэш-таблица.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект