Что ж, библиотекарь поймал вас на том, что вы обманули свою работу с помощью алгоритма сортировки , так что теперь вы наказаны. Вам было приказано создать некоторый код, чтобы библиотекарь мог поразить объект своей безответной привязанности, учителя математики. Так вот что означает «Другие обязанности как назначено» ...
Все знакомы с последовательностью натуральных чисел в базе 10, называемой N :
0, 1, 2, 3, 4, 5, 6, ...
Исходя из этого, мы можем сгенерировать последовательность простых чисел, назовем ее P , так что каждый элемент в P имеет ровно два делителя в N , а именно 1
и себя. Эта последовательность:
2, 3, 5, 7, 11, 13, ...
ОК, пока что довольно.
Библиотекарь подумал об изящной функции F (x, y), которая берет число x
из N с условием 0 <= x <= 9
и число y
из N и вставляет x
в y
десятичное расширение в каждой позиции (то есть добавляет, вставляет или добавляет x
в y
), затем возвращает отсортированный набор новых номеров.
Например, F (6, 127) приведет к
1267, 1276, 1627, 6127
Это все еще скучно, хотя. Библиарий хочет оживить немного дополнительной помощью вместо указания новой функции z -> {p : p in P and F(z,p) subset of P}
, сортируются по возрастанию.
Например, z (7) будет
3, 19, 97, 433, 487, 541, ...
потому что 37
и 73
оба простые, 719
179
и 197
все простые и т. д.
Обратите внимание, что z (2) пусто, потому что никакое простое число, к которому 2
добавлен символ, никогда не будет простым. Аналогично для {0,4,5,6,8}.
Ваша задача - написать код, который будет генерировать и выводить первые 100 чисел в последовательности z (x) для заданного x .
вход
Единственное целое число х такое, что 0 <= x <= 9
. Ввод может быть через аргумент функции, STDIN или эквивалентный.
Выход
Последовательность первых 100 чисел, разделенных по вашему выбору STDOUT или эквивалентной, так что последовательность удовлетворяет z (x), как описано выше. Если z (x) пусто, как в случае {0,2,4,5,6,8}, Empty Set
вместо этого должны быть выведены слова.
ограничения
- Это код-гольф, так как вам нужно будет записать это в учетную карточку, чтобы библиотекарь мог показать учителю математики, и ваша рука легко болит.
- Стандартные ограничения лазейки применяются. Библиотекарь не терпит мошенников.
Эталонные последовательности
x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421
Связанный: Найти наибольшее хрупкое простое число / Найти наименьшее простое число из подстроки / Найти наибольшее простое число, которое все еще является простым после удаления цифры
"
не нужен, но очень хорошая работа.Python 3, 188 байт
Плохо играл в гольф, но здесь кое-что пока. Вместо того, чтобы проверять
p in P and F(z,p) subset of P
, мы проверяем, чтоp*f
для каждого полуприцепаf in F(z,p)
. Объедините это с пробным делением для проверки простоты, и вы получитеO(scary)
алгоритм.источник
O(scary)
Perl, 124 байта
Требуется следующий параметр командной строки:,
-palMntheory=:all
считается как 16. Ввод взят из стандартного ввода.Использование @DanaJ «ы
Math::Prime::Util
модуль для Perl (загружается с прагмойntheory
). Получите это с:is_prime
является детерминированным для всех значений менее 2 64 , что достаточно для наших целей.Образец использования
Ожидаемое время выполнения
x = 1 : 1 м 09,2 с
x = 3 : 0 м 04,2 с
x = 7 : 2 м 52,5 с
x = 9 : 0 м 11,5 с
источник
Пиф, 58
Этот набор тестов вычисляет только первые 10 чисел, потому что для генерации остальных требуется слишком много времени. Грубая сила и первичность и вставка цифр. Демонстрирует такую плохую производительность, что я не смог запустить его до 100, поэтому, пожалуйста, сообщите мне, если есть проблемы.
источник