У вас есть этот код в Javascript (хотя выбор языка не имеет значения):
var arr = new Array(101);
for (skip = 1; skip <= 100; skip++) {
for (i = 0; i <= 100; i+= skip) {
arr[i] = !arr[i];
}
}
Очевидно, что после запуска этого кода в массиве будет множество значений true и false. Если arr [i] было затронуто ровно в несколько раз, оно будет ложным, иначе оно будет истинным.
Вопрос в том, какой шаблон формирует эти значения? Можете ли вы быстро сказать, будет ли arr [15] верным ложным? Как насчет arr [81]?
Я знаю ответ (arr [x] будет истинным, когда x - это квадрат некоторого целого числа), но я не понимаю, как я должен быстро его придумать во время интервью?
Вопрос о бонусе - это то, что является временной сложностью этого фрагмента кода, если вы сделаете это для элементов массива N (я отвечу на него ниже)?