Число является простым числом Чена, если оно удовлетворяет двум условиям:
- Само по себе
- Само плюс два - это либо простое, либо полуматальное число.
Простое число - это число, в котором у него ровно два делителя, и эти делители состоят из самого себя и одного.
Полупростое число - это число, которое является произведением двух простых чисел. (Обратите внимание, что 12 = 2 * 2 * 3 не является полупростым, а 25 = 5 * 5).
Ваша задача - определить, является ли число простым числом Чена. Вы должны вывести любое истинное значение для yes и любое ложное значение для no.
На входе будет любое целое число, большее или равное единице. Это может также быть взято как строка, символьный массив или массив или цифры.
Примеры:
101 -> truthy
223 -> falsy
233 -> truthy
1 -> falsy
Это OEIS A109611 .
Отчасти это вдохновлено тем, что я премьер Софи Жермен? который, к сожалению, был закрыт как дубликат, поэтому я публикую несколько связанных задач, которые не являются дубликатами.
True
за правдой2
илиFalse
ложью (противоречивые ложные значения)?2 * 2 * 2 * 3 * 3
пол-премьер? Как насчет5 * 5
?5*5
полу-простое,2*2*2*3*3
нет. Я сказал ровно два.2*2*2*3*3
имеет ровно два простых фактор, а именно2
и3
, и5*5
имеют один простой множитель, а именно5
.) Может быть , вы могли бы изменить , что в этот вопрос?Ответы:
Брахилог , 7 байт
Попробуйте онлайн!
объяснение
источник
05AB1E , 8 байтов
Попробуйте онлайн!
объяснение
источник
ArnoldC , 1339 байт
Попробуйте онлайн!
(Это мой первый пост на codegolf.SE, пожалуйста, дайте мне знать, если он отформатирован неправильно. Я понимаю, что это число байтов неконкурентное, это просто для удовольствия.)
источник
Желе , 10 байт
Попробуйте онлайн!
источник
Pyth, 10 байт
Попробуйте онлайн!
Как?
источник
Python с симпой ,
6956 байт-13 байтов благодаря alephalpha (путем обновления до sympy 1.1 и использования
primeomega(n+2)
для заменыsum(factorint(n+2).values())
)... принимая от удаленного представления Грифон.
Безымянная функция, возвращающая
True
простые числа Чена иFalse
другие.Считает факторы
n+2
путем суммирования кратностей его главного фактора.Обратите внимание, что
3
умножается наisprime(n)
до того, как<
будет выполнено сравнение, поэтому для не простогоn
кода тесты кода, если онn+2
имеет меньше0
факторов (всегда даетFalse
), в то время как для простогоn
он проверяет,n+2
является ли простое число или полу простое число.источник
3*isprime(n)
Хитрость заключается в то , что я искал в очистке условного оператора.Пари / ГП , 29 байт
3*isprime(n)
Трюк украден из ответа Jonathan Allan «s .Попробуйте онлайн!
источник
Java 8,
858483 байта-1 байт благодаря @ OlivierGrégoire с использованием итеративного подхода вместо рекурсивного.
Объяснение:
Попробуй это здесь.
источник
n->{int N=n+2,f=0,F=0,d=1;for(;d++<n;f+=n%d<1?1:0)F+=N%d<1?1:0;return n>1&f<2&F<3;}
.Mathematica, 28 байт
источник
JavaScript (ES6),
6361 байтОпределяет функцию,
f
которая принимает вn
качестве аргумента и возвращает результат. Я очень доволен тем, какg
получилось; он считает количество простых факторов в числе.2 байта экономят благодаря трюку Кевина Круйссена
&
.Ungolfed
источник
&&
к&
? Поскольку 0/1 являются значениями истина / фальси в JS?|
и&
не закорачивает, это может сэкономить еще больше байтовg
.Japt ,
2220191312 байтПопробуй это
источник
PHP, 64 байта
печатает
0
для правдивых, другие целые для ложных. Запустите как трубу с-nR
или попробуйте онлайн .сломать
согласованное ложное значение, 65 байт:
отпечатки
1
для правдивых и0
ложных.источник
Python 3 с SymPy,
7371 байтПопробуйте онлайн!
Это более точная версия ответа, размещенного здесь ранее, но, похоже, он был удален.
Спасибо @JonathanAllan за сохранение 2 байта!
источник
f=
, создание безымянной функции отлично подходит для code-golf.PHP , 87 байт
Попробуйте онлайн!
PHP , 87 байт
Попробуйте онлайн!
источник
APL NARS, 23 символа
Здесь π⍵ возвращает массив факторов ⍵, отличных от 1; какой-то тест:
источник
Регулярное выражение (ECMAScript), 31 байт
Попробуйте онлайн! (показаны все простые числа Чена ≤ 1000)
Для заданной строки n
x
s это регулярное выражение будет соответствовать тогда и только тогда, когда n - простое число Чена.Он утверждает, что n больше 2 и что строка не имеет формы.
((xx+)(\2(xx))*)(\1\4)+
Это регулярное выражение имеет два значения, в зависимости от того, сколько раз
(\2(xx))
повторяется.Когда это повторяется 0 раз, регулярное выражение может быть упрощено
(xx+)\1+
, что соответствует составным числам.Когда это повторяется положительное число раз, регулярное выражение эквивалентно
((xx+)(\2xx)+)(\1xx)+
Это регулярное выражение требует некоторого объяснения, однако я мало расскажу.
Если вы пройдете через алгебру, то обнаружите, что она
((xx+)(\2xx)+)(\1xx)+
соответствует номерам видаa*b*c-2
гдеa≥4,b≥2,c≥2
.Таким образом, он будет соответствовать (почти) всякий раз, когда n +2 имеет более 2 простых факторов. (т.е. ни простое, ни простое простое)
Обратите внимание, что оно не соответствует 6, 16 или 25, но это не имеет значения, потому что все они составные.
Таким образом,
(?!((xx+)(\2(xx))*)(\1\4)+$)
будет совпадать, пока n не является составным, а n +2 является простым или полупростым.К сожалению, это включает в себя 1 (и 0), поэтому мы проверяем, что n по крайней мере 2 с
xx
Пара разных «31 байтов»:
источник
Рубин ,
4941 байтПопробуйте онлайн!
Спасибо H.PWiz за -8 байт
Как?
Во-первых, получить строку
'l'
повторяется n + 2 раза. Затем примените регулярное выражение, чтобы проверить:(.?)(..)
((..+)\1)(..)
((..+)\2)\1+
2 части регулярного выражения генерируют четвертый случай, который не имеет смысла и его можно игнорировать: он
(.?)\2+
разрешает пустую строку или один символ, потому что\2
пуст.источник
|
ближе друг к другу:^((..+)\2+)(\1+|..)$
. Кроме того, удачное совпадение, что вы пытались решить эту проблему с помощью регулярного выражения в то же время, что и я :).
вместо,.?
так как ввод всегда по крайней мере 1Юлия, 59 байт
источник
Пыть , 11 байт
3 * isprime (x) украдено из ответа Джонатана Аллана
источник
Haskell , 163 байта
Попробуйте онлайн!
источник