Целое число является простым тогда и только тогда, когда оно положительно и имеет ровно 2 различных делителя: 1 и себя. Двойная простая пара состоит из двух элементов: p
и p±2
, которые являются простыми.
Вам будет дано положительное целое число в качестве входных данных. Ваша задача - вернуть истинность / ложность в зависимости от того, принадлежит ли данное целое число к паре близнецов, следуя стандартным правилам решения задач (значения должны быть непротиворечивыми).
Тестовые случаи
Truthy (Twin Primes):
3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43
Ложь (не Твин Праймс):
2, 15, 20, 23, 37, 47, 97, 120, 566
Это код-гольф , поэтому выигрывает самый короткий код в байтах!
code-golf
number
decision-problem
primes
Тейлор Скотт
источник
источник
Ответы:
Брахилог ,
98 байтПопробуйте онлайн!
объяснение
источник
√
использование! +1Желе ,
109 байтПопробуйте онлайн!
Задний план
За исключением (3, 5) , все пары двойниковых простых чисел имеют вид (6k - 1, 6k + 1) .
Так как (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 и
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , учитывая вход n> 3 , достаточно проверить, являются ли n и n + n% 6 - 3 простыми.
Эта формула происходит с работы по п = 3 , а, как 3 + 3% 6 - 3 = 3 является простым и 3 является твин простое число.
Как это работает
источник
Python 3 , 53 байта
Попробуйте онлайн!
Задний план
Все целые числа принимают одну из следующих форм с целым числом k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .
Поскольку 6k - 2 , 6k и 6k + 2 - все четные, а 6k - 3 делится на 3 , все простые числа, кроме 2 и 3, должны иметь вид 6k - 1 или 6k + 1 . Поскольку разница пары простых двойников равна 2 , за исключением (3, 5) , все пары двойниковых простых чисел имеют вид (6k - 1, 6k + 1) .
Пусть n имеет вид 6k ± 1 .
Если n = 6k -1 , то n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .
Если n = 6k + 1 , то n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .
Таким образом, если n является частью пары простых чисел-близнецов и n ≠ 3 , ее двойником будет n + n% 6 - 3 .
Как это работает
Python не имеет встроенного теста на простоту. Несмотря на то, что существуют краткие способы проверки единственного числа на простоту, выполнение этого для двух чисел будет длительным. Вместо этого мы будем работать с делителями.
подсчитывает, сколько целых чисел k в интервале [2, 4n) делит (n + n% 6 - 3) n равномерно, то есть подсчитывает количество делителей (n + n% 6 - 3) n в интервале [2 , 4н) . Мы утверждаем, что это число равно 2 тогда и только тогда, когда n является частью пары простых чисел-близнецов.
Если n = 3 (двойное простое число), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 имеет два делителя ( 3 и 9 ) в [2, 12) .
Если n> 3 - простое число-близнец, как показано выше, m: = n + n% 6 - 3 - его двойник. В этом случае mn имеет ровно четыре делителя: 1, m, n, mn .
Поскольку n> 3 , имеем m> 4 , поэтому 4n <mn и ровно два делителя ( m и n ) попадают в интервал [2, 4n) .
Если n = 1 , то (n + n% 6 - 3) n = 1 + 1 - 3 = -1 не имеет делителей в [2, 4) .
Если n = 2 , то (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 имеет один делитель (сам) в [2, 8) .
Если n = 4 , то (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 имеет четыре делителя ( 2 , 4 , 5 и 10 ) в [2, 16) .
Если n> 4 четное, 2 , n / 2 и n все делят n и, следовательно, (n + n% 6 - 3) n . Мы имеем n / 2> 2, так как n> 4 , поэтому в [2, 4n) есть по крайней мере три делителя .
Если n = 9 , то (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 имеет три делителя ( 3 , 9 и 21 ) в [2, 36) .
Если n> 9 кратно 3 , то все 3 , n / 3 и n делят n и, следовательно, (n + n% 6 - 3) n . Мы имеем n / 3> 3, так как n> 9 , поэтому в [2, 4n) есть по крайней мере три делителя .
Наконец, если n = 6k ± 1> 4 не является двойным простым числом, то либо n, либо m: = n + n% 6 - 3 должны быть составными и, следовательно, допустить правильный делитель d> 1 .
Поскольку либо n = m + 2, либо m = n + 2 и n, m> 4 , целые числа d , m и n являются различными делителями числа mn . Кроме того, m <n + 3 <4n, так как n> 1 , поэтому mn имеет по крайней мере три делителя в [2, 4n) .
источник
05AB1E ,
109 байтовСохранено 1 байт благодаря Датбой
Попробуйте онлайн! или как тестовый набор
объяснение
источник
ÌIÍ‚
вместо40SÍ+
-1 байтPHP, 52 байта
без GMP, 84 байта
(используя мою простую функцию из переполнения стека )
Беги как труба с
-nF
. Пустой вывод для фальши,1
для правды.Отличное решение Денниса, портированное на PHP, 56 байт
Запустите как трубу с
-nR
или попробуйте онлайн .источник
Mathematica, 33 байта
Попробуйте онлайн!
источник
MATL , 11 байт
Вывод
0
или1
.Попробуйте онлайн!
объяснение
источник
Pyth ,
14 1211 байтовТестирование.
Сохранено 3 байта по формуле в ответе @Dennis. Сохранено 1 байт благодаря @Dennis.
Pyth , 14 байтов * Исходное решение
Тестирование.
источник
Retina ,
4544 байтаВозвращает 1, если вход является двойным простым, 0 в противном случае
Попробуйте онлайн!
объяснение
Преобразовать в унарный
Поместите n-2, n и n + 2 в свои строки
(Завершающий перевод строки) Удалите все композиты больше 1
Проверьте, есть ли два последовательных простых числа (или 1,3, потому что 3 - двойное простое число)
источник
Perl 6 , 24 байта
Попробуйте онлайн!
*
аргумент этой анонимной функции.0 & (-2 | 2)
это соединение, состоящее из чисел0
И или-2
ИЛИ2
. Добавление*
к этому соединению производит соединение числа*
И с любым из чисел* - 2
ИЛИ* + 2
. Вызовis-prime
метода на этом соединении возвращает истинное значение, если*
простое И или* - 2
ИЛИ* + 2
простое. Наконец,?
сворачивание истинного перехода к булевому значению удовлетворяет условию непротиворечивых возвращаемых значений.источник
JavaScript,
91 байт, 81 байт благодаря Джареду Смитуобъяснение
p
сообщает, является ли данное числоn
простым или нет, иt
проверяет заданное числоn
иn±2
.пример
Показать фрагмент кода
источник
var
круглые скобкиn
в определении функции и т. Д.n
рядом со значениемt(n)
для большей ясности (например,7: true
)J, 23 байта
Попробуйте онлайн!
как?
источник
3>0#.@p:0 2 _2&+
05AB1E , 8 байтов
Порт Денис Желе ответ
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Рубин, 38 + 6 = 44 байта
Требуются варианты
-rprime
.Попробуйте онлайн!
источник
&
вместо&&
JavaScript (ES6), 54 байта
Показать фрагмент кода
источник
Excel VBA,
102100 байтНет встроенных примитивов для VBA :(
Код
Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки
[A1]
и выводит1
(истинно) или0
(ложно) в непосредственное окно VBEВспомогательная функция
В качестве альтернативы 122 байта
Код
Решение на основе функции рекурсивной проверки простоты
Вспомогательная функция
источник
PHP, 85 байтов 24 байта благодаря Mayube
источник
a
иb
)function
ключевое слово?Python 2 , 75 байт
Попробуйте онлайн!
источник
Japt , 13 байт
Возвращает
true
иfalse
для того, является ли число частью пары первичных близнецов.Попробуйте онлайн!
объяснение
Неявный:
U
= входное целоеПроверьте, является ли ввод простым (
j
), И (©
) ...Используя массив
[U+2, U-2]
, проверьте, являются ли какие-либо элементы истинными (d
) в соответствии с функцией первичности (j
).Неявный вывод логического результата
is input prime AND is any ±2 neighbor prime
.источник
[U+2U-2]
мог бы быть намного короче, но я не могу понять, как ...