Разделяем ли мы главный кластер?


10

Простое скопление целого числа N выше , чем 2 , определяются как пара образована самым высоким простым строго снизить , чем N , а самый низкий премьер строго выше , чем N .

Обратите внимание, что согласно приведенному выше определению, если целое число само является простым, то его простой кластер является парой простых чисел, предшествующих и следующих за ним.

задача

Учитывая два целых числа N , M ( N, M ≥ 3 ), выведите истинное / ложное значение, основанное на том, имеют ли N и M один и тот же простой кластер.

Это , поэтому цель состоит в том, чтобы максимально уменьшить количество байтов. Таким образом, самый короткий код на каждом языке программирования выигрывает.

Тестовые случаи / Примеры

Например, премьер - кластер из 9 является [7, 11], потому что:

  • 7 - самое высокое простое число, строго меньшее 9 , и
  • 11 - самое низкое простое число, строго выше 9 .

Точно так же первичное скопление 67 есть [61, 71](заметьте, что 67 простое).

Правдивые пары

8, 10
20, 22
65, 65
73, 73
86, 84
326, 318
513, 518

Ложные пары

4, 5
6, 8
409, 401
348, 347
419, 418
311, 313
326, 305

Должны ли значения истинности / ложности быть двумя разными значениями или можно определить отображение из вывода своей программы в значение истинности / ложности и вывести (потенциально бесконечно) много разных значений?
Джонатан Фрех

@JonathanFrech Truthy / Falsy по определению проблемы решения , не обязательно последовательный, но не точный и правдивый / ложный
Mr. Xcoder

Ответы:


14

Желе , 6 4 3 5 4 байта

rÆPE

Попробуйте онлайн! или попробуйте все контрольные примеры .

Как это работает

rÆPE    Main link. Arguments: N, M
r       Yield the range of integers between N and M, inclusive.
 ÆP     For each integer, yield 1 if it is prime, 0 otherwise.
   E    Yield 1 if all items are equal (none in the range were prime,
        or there's only one item).

Работает, потому что два числа имеют разные простые кластеры, если между ними есть простое число, или любое число само является простым; если оба числа не совпадают, в этом случае все равно Eвозвращается 1(все элементы в массиве из одного элемента равны).


7
Ваш программный источник не выглядит дружелюбным ...
Stan Strum

2

Perl 6 , 52 байта

{[eqv] @_».&{(($_...0),$_..*)».first(*.is-prime)}}

Попробуй это

Expanded:

{  # bare block lambda with implicit slurpy input 「@_」

  [eqv]               # see if each sub list is equivalent

    @_».&{            # for each value in the input

      (

        ( $_ ... 0 ), # decreasing Seq
          $_ ..  *    # Range

      )».first(*.is-prime) # find the first prime from both the Seq and Range

    }
}


2

Рубин , 57 54 байта

->n,m{[*n..m,*m..n].all?{|x|?1*x=~/^(11+)\1+$/}||n==m}

Попробуйте онлайн!

Использует ужасный тест на регулярность регулярных выражений из моего ответа (о котором я забыл, пока не нажал на него) на связанный вопрос. Является ли это число простым? , Поскольку у нас N, M ≥ 3, проверка на 1 может быть удалена из шаблона, что делает количество байтов меньше, чем при использовании встроенного.

Примечание: тест на регулярность регулярных выражений патологически, смешно неэффективен. Я полагаю, что это по крайней мере O (n!), Хотя у меня нет времени, чтобы понять это прямо сейчас. Потребовалось двенадцать секунд, чтобы он проверил 100,001, и потратил пять или десять минут на 1000,001, прежде чем я отменил его. Используйте / злоупотребляйте на свой страх и риск.


1
В таком случае это вероятно . Вы знаете, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)что займет тысячелетия, чтобы бежать.
user202729

2

Сетчатка , 58 байт

\b(.+)¶\1\b

.+
$*
O`
+`\b(1+)¶11\1
$1¶1$&
A`^(11+)\1+$
^$

Попробуйте онлайн! Объяснение:

\b(.+)¶\1\b

Если оба входа одинаковы, просто удалите все и перейдите к выходу 1 в конце.

.+
$*

Преобразовать в одинарный.

O`

Сортировать по порядку.

+`\b(1+)¶11\1
$1¶1$&

Разверните до диапазона всех чисел.

A`^(11+)\1+$

Удалить все составные числа.

^$

Если не осталось чисел, выведите 1, иначе 0.


2

PARI / GP, 28 байт

v->s=Set(v);#s<2||!primes(s)

Попробуйте онлайн со всеми тестами!

Возвращает 0или 1(обычные «логические» значения PARI / GP).

Объяснение:

vдолжен быть вектором (или вектором столбца, или списком) с двумя числами Nи Mкоординатами. Например [8, 10]. Тогда sбудет «множество», составленное из этих чисел, которое будет либо однокоординатным вектором (если N==M), либо двухкоординатным вектором с отсортированными записями в противном случае.

Тогда, если число #sкоординат в sэто только один, мы получаем 1(правда). В противном случае, primesвернет вектор всех простых чисел в замкнутом интервале от s[1]до s[2]. Отрицание !этого даст, 1если вектор пуст, а отрицание вектора одной или нескольких ненулевых записей (здесь одно или несколько простых чисел) даст0 .


2

JavaScript (ES6), 57 56 байт

Принимает ввод в синтаксисе карри (a)(b). Возвращает 0или 1.

a=>b=>a==b|!(g=k=>a%--k?g(k):k<2||a-b&&g(a+=a<b||-1))(a)

Контрольные примеры

Как?

a => b =>                 // given a and b
  a == b |                // if a equals b, force success right away
  !(g = k =>              // g = recursive function taking k
    a % --k ?             //   decrement k; if k doesn't divide a:
      g(k)                //     recursive calls until it does
    :                     //   else:
      k < 2 ||            //     if k = 1: a is prime -> return true (failure)
      a - b &&            //     if a equals b: neither the original input integers nor
                          //     any integer between them are prime -> return 0 (success)
      g(a += a < b || -1) //     else: recursive call with a moving towards b
  )(a)                    // initial call to g()

2

R , 63 46 байт

-17 Джузеппе

function(a,b)!sd(range(numbers::isPrime(a:b)))

Попробуйте онлайн!

Довольно простое применение решения ETHProductions 'Jelly . Главный интересный вывод состоит в том, что с R булевы векторы any(x)==all(x)эквивалентны min(x)==max(x).



Кроме того, поскольку min(x)==max(x)это эквивалентно проверке того, что все элементы в is_prime(a:b)них равны, мы можем использовать этот последний трюк, чтобы уменьшить его до 46 байт с помощью пакета primesили numbers.
Джузеппе

2

C (gcc), 153 146 байт

i,B;n(j){for(B=i=2;i<j;)B*=j%i++>0;return!B;}
#define g(l,m,o)for(l=o;n(--l););for(m=o;n(++m););
a;b;c;d;h(e,f){g(a,b,e)g(c,d,f)return!(a-c|b-d);}

-7 от Джонатана Фреха

Определяет функцию, hкоторая принимает две intсекунды и возвращает 1истину и 0ложь

Попробуйте онлайн!

n это функция, которая возвращает 1, если ее аргумент не прост.

g макрос, который устанавливает свой первый и второй аргументы для следующего простого числа меньше и больше, чем (соответственно) своего третьего аргумента

hделает gдля обоих входов и проверяет, являются ли выходы одинаковыми.


return a==c&&b==d;может быть return!(a-c|b-d);.
Джонатан Фрех


@JonathanFrech Исправлена ​​ссылка на TIO.
pizzapants184


1

APL (Dyalog Unicode) , 18 + 16 = 34 24 байта

CY'dfns'
∧/=/4 ¯4∘.pco

Попробуйте онлайн!

Благодаря Адаму за 10 байтов.

Линии ⎕CY'dfns'( С ОП Y ) необходимо импортировать dfns ( д инамической е unctio нс ) сбор, включены по умолчанию Dyalog APL устанавливает.

Как это работает:

∧/=/4 ¯4∘.pco  Main function. This is a tradfn body.
               The 'quad' takes the input (in this case, 2 integers separated by a comma.
          pco   The 'p-colon' function, based on p: in J. Used to work with primes.
    4 ¯4∘.      Applies 4pco (first prime greater than) and ¯4pco (first prime smaller than) to each argument.
  =/            Compares the two items on each row
∧/              Applies the logical AND between the results.
                This yields 1 iff the prime clusters are equal.




0

Mathematica, 39 27 26 байт

Equal@@#~NextPrime~{-1,1}&

Expanded:

                         &  # pure function, takes 2-member list as input
       #~NextPrime~{-1,1}   # infix version of NextPrime[#,{-1,1}], which
                            # finds the upper and lower bounds of each
                              argument's prime clusters
Equal@@                     # are those bounds pairs equal?

Применение:

Equal@@#~NextPrime~{-1,1}& [{8, 10}]
(*  True  *)

Equal@@#~NextPrime~{-1,1}& [{6, 8}]
(*  False  *)

Equal@@#~NextPrime~{-1,1}& /@ {{8, 10}, {20, 22}, {65, 65}, 
    {73, 73}, {86, 84}, {326, 318}, {513, 518}}
(*  {True, True, True, True, True, True, True}  *)

Equal@@#~NextPrime~{-1,1}& /@ {{4, 5}, {6, 8}, {409, 401}, 
    {348, 347}, {419, 418}, {311, 313}}
(*  {False, False, False, False, False, False}  *)

Вклады: -12 байт от Jenny_mathy , -1 байт от Martin Ender


Это проверяет только следующий штрих. Попробуйте NextPrime [#, {- 1,1}]
J42161217

@Jenny_mathy: я вижу, вы правы. Захвачен тестовым набором «348, 347», который сейчас продемонстрирован как пройденный.
Эрик Тауэрс

27 байт: Equal@@NextPrime[#,{-1,1}]&принимает в качестве входных данных [{N,M}]или, если вы хотите сохранить исходный ввод, используйте следующие 30 байт:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy: Ну, ..., указанный вход - два целых числа, а не список, так что ...
Эрик Тауэрс

1
@EricTowers взять список в порядке . Кроме того, вы можете сохранить байт, используя инфиксную нотацию #~NextPrime~{-1,1}.
Мартин Эндер

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.