TGViewer
Зачем мне эта математика Зачем мне эта математика @practicum_math · 16.1K subscribers
Post #1029 3.8K
Сразу начнём с ответа:

⏩️ 10 лампочек ⏪️

Решение вчерашней задачи основано на простой, но важной мысли: каждая лампочка переключается столько раз, сколько у её номера делителей.

Например, лампочка под номером 6 переключается при проходах 1-го, 2-го, 3-го и 6-го человека, то есть всего 4 раза. Так как это число чётное, в итоге (после выхода 100-го человека) лампочка будет выключена.

А лампочка под номером 9 — при 1-м, 3-м и 9-м, то есть 3 раза. Число нечётное, значит, в итоге лампочка останется включённой.


Тем самым ключевое наблюдение: если у числа чётное число делителей, лампочка выключится, а если нечётное — останется включённой.

Обычно делители числа разбиваются на пары: если d — делитель числа n, то n/d — тоже делитель.

Например, вот 3 пары для всех 6 делителей числа 12: (1, 12), (2, 6), (3, 4). Понятно, что если все делители разбились на пары, значит, их число чётное.


Но когда же у числа нечётное число делителей

Есть только одно исключение из общего правила — это полные квадраты.

Рассмотрим, например, число 36. Его пары делителей — это (1, 36), (2, 18), (3, 12), (4, 9), (6, 6). Но, как мы видим, последняя пара на самом деле состоит из одного и того же числа. Всё дело в том, что если число n — полный квадрат, то для делителя d = √n значение n/d также равно √n.

Таким образом, он не образует пару с другим числом, а остаётся «одиночкой». Так и получается, что у полных квадратов, и только у них, нечётное количество делителей.


Следовательно, включёнными останутся именно те лампочки, номера которых являются полными квадратами, а это 10 лампочек с номерами 1, 4, 9, 16, 25, 36, 49, 64, 81, 100.

*️⃣Отдельное спасибо говорим нашему подписчику @kevlarius. Он предложил решение с помощью программирования. Получилось очень наглядно: звездочка — горящая лампочка, точка — выключенная, на исходном шаге — все звездочки, а на финальном — только 10 штук.


class Lamp:
def __init__(self, state=False):
self.state = state

def switch_state(self):
self.state = not self.state


if __name__ == '__main__':
lamps = [Lamp() for _ in range(100)]
step = 1
for p in range(100):
index = (step - 1)
while index < len(lamps):
lamps[index].switch_state()
index = index + step
step += 1
lamps_str = "".join(("*" if lamp.state else ".") for lamp in lamps)
print(f"{p + 1:3}: {lamps_str}")


#задача
  • ❤ 17
  • 👍 8
  • ❤‍🔥 3
  • 💘 3
  • 👎 1
More from @practicum_math
  1. Sep 21, 2026Академическая династия, построенная на... зависти 🤯 Чем дольше изучаешь математику, тем,…
  2. Sep 17, 2026Несмотря на объективную простоту вчерашней задачи, она интереснее, чем кажется на первый в…
  3. Sep 16, 2026Post #1154
  4. Sep 16, 2026Включайте звук и выигрывайте миллион решайте на время. Уверены, вы справитесь. Голосовать…
  5. Sep 12, 2026У будущего тоже есть дедлайн... на регистрацию! Напоминаем, что уже завтра Яндекс Образова…
  6. Sep 9, 2026⚡️Вчера в сети разгорелся большой скандал — и снова на тему «Математика VS ИИ» Если вы про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →