Нечётные числа
Что же я там считаю такое, что мне понадобились
Коллега в офисе, который
Формулировка у неё была очень простая.
Дано множество X. Единица принадлежит X. Если 3×x принадлежит X, то и x принадлежит X. Если x принадлежит X, то и 2×x + 1 принадлежит X. При этом x — натуральное, разумеется.
Требуется доказать, что таким образом можно получить множество всех натуральных нечётных чисел. Авторы статьи, кстати, были убеждены, что найти доказательство у читателей не получится.
Упомянутый коллега у себя в университете при помощи студента, Фортрана и Пролога пытался проверить эту теорему по следующему алгоритму.
Берём число, например, «9». Оно могло быть получено, согласно перечисленным утверждениям, двумя путями: либо
В этой задаче очень быстро растёт разрядность, поэтому в те времена рассчитать даже первую сотню чисел было достаточно проблематично.
В общем, я решил с этой задачкой побаловаться.
Для начала написал программу, которая вычисляет эти числа перебором. Начинаем, понятное дело, с единицы, следующее число получаем по формуле 2×x + 1, потом, пока число делится на три, делим и выводим эти числа, считая для каждого ещё и 2×x + 1 и так далее. Кроме того, пришлось ещё запоминать все найденные числа, чтобы избегать циклов.
Первую версию я написал с использованием рекурсии, но программа падала примерно через полторы минуты работы — стек просто кончался. Пришлось переписать. Новая версия работает уже несколько часов на моём ноутбуке и вычислила за это время уже почти 17 миллионов чисел. Оставлю её на ночь, интересно, закончит ли она к утру.
Комментарии 33
если в результате по завершению работы «решета» все байты равны 0xAA — в диапазоне 0…n гипотеза подтвердилась
Я не силен в математике, а сколько их должно быть?
Но с точки зрения программирования это конечно головная боль
Думаю, я
Можно, кстати,
У моего ноута — 14, но скорее всего он нагреется ещё больше и будет троттлить. У него уже сейчас температура 60°.
У нас на работе есть компьютер с водяным охлаждением. Можно бы его часов на 40 зарядить для начала — посмотреть будет ли быстрее на одном ядре. А потом, если будет, попробовать сделать всё в десять потоков.
Ну, там же наверняка числокакое-нибудь уровня задачки про зерна и шахматы. Если это 128-битное число без знака, то оно может быть в диапазоне от 0 до 340 282 366 920 938 463 463 374 607 431 768 211 455. Очевидно, что перебор такого диапазона на ноутбуке, с учетом того, что каждый разряд умножает длительность в десять, может занимать непредсказуемое время — дни или недели как минимум.
https://habr.com/ru/articles/870220/
Гипотеза Коллатца как фейл мировой математики / Хабр
Я пока сделал паузу — у меня перебираются в один поток