Арифметична послідовність примрів божевільного бібліотекаря


18

Що ж, бібліотекар застав вас обманювати свою роботу, використовуючи алгоритм сортування , тому зараз вас карають. Вам було наказано створити якийсь код, щоб бібліотекар міг вразити об'єкт своєї несподіваної прихильності, вчителя математики. Ось що означає "Інші обов'язки як призначені" означає ...

Всім знайома послідовність натуральних чисел у базі 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 .

Вхідні дані

Єдине ціле число 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

Пов'язане: Знайдіть найбільший крихкий простір / Знайдіть найменший прайм із підрядка / Знайдіть найбільший прайм, який все ще є простим числом після видалення цифр

Відповіді:


5

Pyth, 49 байт

Як і відповідь Python3 та інші відповіді Pyth, час виконання 100 чисел є непомірним. (тестовий набір дає 10)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

Спробуйте в Інтернеті


1
Послідовність "є непотрібною, але дуже приємна робота.
FryAmTheEggman

Дякую за нагадування. Оскільки EOL більше не припиняє рядок, я уникав незавершених рядків, але, звичайно, EOF все ще працює
Brian Tuck

4

Пітон 3, 188 байт

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

Погане поле для гольфу, але ось щось наразі. Замість перевірки p in P and F(z,p) subset of Pми перевіряємо, що p*fє напівпринципом для кожного f in F(z,p). Поєднайте це з пробним поділом для тестування первинності, і ви отримаєте O(scary)алгоритм.


+1 заO(scary)
AdmBorkBork

1
Хороший трюк у встановленні i до None.
lirtosiast

3

Perl, 124 байти

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

Потрібен наступний варіант командного рядка: -palMntheory=:allвважається 16. Введення, взятого з stdin.

Використання @DanaJ «и Math::Prime::Utilмодуль для Perl (завантажується з Прагма ntheory). Отримайте його за допомогою:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_primeє детермінованим для всіх значень менше 2 64 , що достатньо для наших цілей.


Використання зразка

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

Очікувані тривалість виконання

x = 1 : 1m 09,2s
x = 3 : 0m 04,2s
x = 7 : 2m 52,5s
x = 9 : 0m 11,5s


1

Піта, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

Цей тестовий набір обчислює лише перші 10 чисел, оскільки для генерування решти потрібно занадто багато часу. Брут примушує як первинність, так і вставлення цифр. Продемонструє настільки погані показники, що мені не вдалося запустити його до 100, тому, будь ласка, скажіть мені, чи є проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.