Недавно я прочитал роман «Одиночество простых чисел», где главные герои несколько сравниваются с двумя простыми числами (« всегда вместе, но никогда не трогай »).
Твин простое простое число , что либо 2 меньше или больше , чем 2 другого простого числа -для например, двойной прайм пары (41, 43). Другими словами, двойное простое число - это простое число, у которого простое число равно двум. Иногда термин «двойное простое число» используется для пары двойных простых чисел; альтернативное название для этого - простой близнец или простая пара. Википедия
Хотя мне не очень понравился депрессивный роман, и с тех пор, как я недавно попал в PPCG, у меня возник вопрос ...
Задача:
Учитывая положительное целое число N> 4, найдите одиночные простые числа (AKA- изолированные простые числа ) между ближайшими парами двойных простых чисел .
Обратите внимание, что в данном случае под термином « одиночные простые числа» я имею в виду все простые числа, которые не являются двойными простыми числами и между парами двойных простых чисел . Вот почему N> 4, потому что первые две пары простых чисел (3, 5) и (5, 7).
Пример:
- N = 90
- Найдите первые две пары двойниковых простых чисел <N и> N. Это: (71, 73) и (101, 103).
- Найдите одинокие простые числа в диапазоне> 73 и <101.
- Это: 79, 83, 89, 97.
Особые случаи:
- Если N находится между двумя двойными простыми числами, найдите ближайшие пары простых чисел> N + 1 и <N-1. Пример: N = 72, найдите ближайшие пары простых чисел> 73 и <71, затем исключите их из списка 71 и 73, поскольку они не являются простыми простыми числами . Таким образом, для N = 72 ожидаемый результат: 67,
71,73, 79, 83, 89, 97 - Если N принадлежит паре простых чисел-близнецов, например N = 73, ближайшими парами простых чисел являются (71, 73) и (101, 103). Если N = 71, ближайшими парами простых чисел являются (59, 61) и (71, 73).
Тестовые случаи:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Правила:
- Напишите полную программу или функцию, которая будет брать число N из стандартного ввода.
- Выведите список простых чисел в удобочитаемом формате как csv, list, array и т. Д.
- Самый короткий код выигрывает.
- Пожалуйста, включите (когда это возможно) тестируемую онлайн скрипку.
Ответы:
На самом деле, 47 байтов
Это решение касается случая , где
n
находится между двумя раздельными штрихами, проверяя , если нижняя граница является больше пары сдвоенных простых чисел (исключая двойной прайм слева от нас от того , наша нижняя граница) , и если верхняя граница IS меньше паров сдвоенных простых чисел (исключающих двойной прайм справа от нас от того , наших верхней границы). Чтобы не допустить включения двойных простых чисел в наш диапазон, когда у нас есть нижняя и верхняя границы, нам нужно удалить простые числа,p
гдеp-2
ORp+2
- простые числа, отсюда логическое ИЛИ и отрицание в коде.Это немного долго и, вероятно, может быть дальше в гольфе. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
23
при вводе24
данных. Двойные простые оценки должны быть17 / 19
и29 / 31
, и23
это изолированное простое число в диапазоне19 .. 29
.p
говорится,25
что расстановка простых чисел еще не исправлена, либо Деннис фактически не исправлялся с момента исправления ошибки. Позволь мне пойти проверить.PowerShell v2 +,
237149147231216181174169166 байтПринимает участие
$n
. Определяет новую функциюf
в качестве простой функции регулярного выражения (здесь возвращается логическое значение, если вход является простым или нет).Следующая часть устанавливается
$i
равной$n
, затем переходит в цикл вверх, пока мы не найдем нижнюю половину верхней границы нашей пары простых чисел. Например, для ввода90
это останавливается на$i=101
.Затем мы переходим от верхней границы вниз. Я знаю, это похоже на бесконечный цикл, но это в конце концов закончится.
Если текущее число простое (
f(--$i)
), но его+/- 2
не простой, мы добавим$i
к трубопроводу. Однако, если+/- 2
это простое число, мы проверяем, не ниже ли мы$n-1
(т.е. учитываем ли мы ситуацию, когда она находится внутри пары двойных простых чисел), и в этот момент мыexit
. По завершении программы конвейер выводится на экран неявным образомWrite-Output
.NB. Из-за циклической структуры простые числа печатаются в порядке убывания. ОП уточнил, что все в порядке.
Примеры
Выходные данные здесь разделены пробелами, так как это метод строковой классификации по умолчанию для массива.
источник
Haskell, 105 байт
Попробуйте онлайн
источник
JavaScript,
186183168158 байтисточник
PHP, 207 байт
4754 байта дляis_prime
функции, которой нет в PHP. Я бы победил Mathematica без этого. :-Dбеги с
-r
. печатает запятуюсломать
Примечание :
is_prime
Функция на самом деле возвращаетtrue
для$n<2
; но, по крайней мере, это не производит предупреждение. Вставьте,$n=
прежде чем$n>1
исправить.источник
Mathematica,
169157 байтисточник
Ракетка 228 байт
Недостатком этой версии является то, что она находит все простые числа до N, а не только те, которые находятся вокруг N.
Безголовая версия:
Тестирование:
Выход:
источник
Ракетка 245 байтов
Безголовая версия:
Выход:
источник
Python 2.7: 160 байт
предложения приветствуются :)
источник