ПРАЙМ-тайм!

Mar 01 2023
Мой приятель Дуг сделал запрос на функцию солнечных метрических часов: добавьте индикатор, который сообщает вам, когда отображаемое время является простым числом. Это согласуется с моей одержимостью простыми числами и моим желанием бесконечно возиться с этим проектом.

Мой приятель Дуг сделал запрос на функцию солнечных метрических часов : добавьте индикатор, который сообщает вам, когда отображаемое время является простым числом. Это согласуется с моей одержимостью простыми числами и моим желанием бесконечно возиться с этим проектом.

Так что, конечно, я сделал это.

Для этой цели я решил не рассматривать время чч:мм как единое число. Часы и минуты подсчитывают количество по-разному, поэтому не кажется правильным рассматривать это как скаляр. Но как солнечное, так и местное метрическое время имеют смысл как скаляры.

Я думал, что буду вычислять все простые числа, меньшие максимального отображаемого числа (9999), при запуске, сохранять их в разреженном векторе и выполнять быстрый поиск по запросу, чтобы увидеть, было ли время простым. Даг и я говорили о подходе. Он рассудил, что если Элон внесет какие-либо изменения в симуляцию, в которой мы все живем, то простые числа могут измениться, поэтому будет безопаснее вычислять их при включении питания. Это имело смысл.

К сожалению, на моей плате Arduino Uno Wifi Rev2 недостаточно памяти для структур данных алгоритма Sieve of Eratosthenes и вектора поиска, который я хотел использовать. Одна из интересных особенностей вычислительной платформы Arduino заключается в том, что она ограничена в ресурсах. Это возвращает меня к написанию приложений для Apple II, когда я учился в старшей школе: вы должны обращать внимание на то, чтобы сделать вещи маленькими и эффективными.

Оказывается, можно определить простоту любого числа до 10 000, проверив его делимость на простые числа до первого простого числа после квадратного корня из 10 000. Этого недостаточно для вычисления факторов, просто для определения простоты. Я не буду излагать здесь теорию чисел, потому что в ней интересно разобраться самому.

Я жестко закодировал массив [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79 , 83, 89, 97, 101] в часы и проверять на делимость каждый раз, когда я рисую метрическое время на одном из 4-разрядных 7-сегментных дисплеев. На самом деле это довольно эффективно: половина чисел выбивается при сравнении с двумя и так далее.

Когда время простое, я подсвечиваю десятичную точку после последней цифры:

Местное метрическое время простое!

Мне нравится замечать, когда наступает прайм-тайм. Довольно часто бывает, что и солнечное, и местное метрическое время являются простыми. Это двойной выброс теоретико-числовых эндорфинов!