¿Compartimos el clúster principal?

10

El clúster prime de un número entero N más alto que 2 se define como el par formado por la más alta primer estrictamente inferior a N y el más bajo prime estrictamente mayor que N .

Tenga en cuenta que, siguiendo la definición anterior, si el entero es un primo en sí mismo, entonces su grupo principal es el par de primos que lo preceden y lo suceden .

Tarea

Dados dos enteros enteros N , M ( N, M ≥ 3 ), genera un valor verdadero / falso basado en si N y M tienen el mismo grupo principal.

Este es el , por lo que el objetivo es reducir su recuento de bytes tanto como sea posible. Por lo tanto, gana el código más corto en cada lenguaje de programación .

Casos de prueba / Ejemplos

Por ejemplo, el primer grupo de 9 es [7, 11], porque:

  • 7 es el primo más alto estrictamente más bajo que 9 , y
  • 11 es el primo más bajo estrictamente más alto que 9 .

Del mismo modo, el primer grupo de 67 es [61, 71](tenga en cuenta que 67 es un primo).

Pares de verdad

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

Pares de falsa

4, 5
6, 8
409, 401
348, 347
419, 418
311, 313
326, 305
Sr. Xcoder
fuente
¿Los valores de verdad / falsedad tienen que ser dos valores distintos o se puede definir una asignación de la salida de su programa a un valor de verdad / falsedad y generar (potencialmente infinitamente) muchos valores diferentes?
Jonathan Frech
@JonathanFrech Truthy / Falsy según la definición del problema de decisión , no necesariamente coherente pero sí discreto y verdadero / falso
Sr. Xcoder

Respuestas:

14

Gelatina , 6 4 3 5 4 bytes

rÆPE

Pruébalo en línea! o Pruebe todos los casos de prueba .

Cómo funciona

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).

Funciona porque dos números tienen diferentes grupos primos si hay un primo entre ellos, o si algún número es primo en sí mismo; a menos que ambos números sean iguales, en cuyo caso se Edevuelve de 1todos modos (todos los elementos en una matriz de un solo elemento son iguales).

ETHproductions
fuente
77
La fuente de sus programas no parece amigable ...
Stan Strum
2

Perl 6 , 52 bytes

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

Pruébalo

Expandido:

{  # 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

    }
}
Brad Gilbert b2gills
fuente
2

Ruby , 57 54 bytes

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

Pruébalo en línea!

Utiliza la horrible prueba de primalidad de expresiones regulares de mi respuesta (que había olvidado hasta que hice clic en ella) a la pregunta relacionada ¿ Es este número un primo? . Como tenemos N, M ≥ 3, la verificación de 1 se puede eliminar del patrón, haciendo que el byte cuente menos que con el incorporado.

Nota: La prueba de primalidad de expresiones regulares es patológicamente hilarantemente ineficiente. Creo que es al menos O (n!), Aunque no tengo tiempo para resolverlo en este momento. Me llevó doce segundos comprobar 100.001, y estuve moliendo durante cinco o diez minutos en 1,000.001 antes de cancelarlo. Uso / abuso bajo su propio riesgo.

Restablecer a Monica - notmaynard
fuente
1
A ese ritmo es probable . Ya sabes, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)lo que llevará miles de años para correr.
usuario202729
2

Retina , 58 bytes

\b(.+)¶\1\b

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

Pruébalo en línea! Explicación:

\b(.+)¶\1\b

Si ambas entradas son iguales, simplemente elimine todo y pase a la salida 1 al final.

.+
$*

Convierte a unario.

O`

Ordenar en orden.

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

Expande a un rango de todos los números.

A`^(11+)\1+$

Eliminar todos los números compuestos.

^$

Si no quedan números, salida 1, de lo contrario 0.

Neil
fuente
2

PARI / GP, 28 bytes

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

¡Pruébelo en línea con todos los casos de prueba!

Devuelve 0o 1(valores "booleanos" PARI / GP habituales).

Explicación:

vdebe ser un vector (o un vector de columna o una lista) con los dos números Ny Mcomo coordenadas. Por ejemplo [8, 10]. Entonces sserá el "conjunto" formado por estos números, que es un vector de una coordenada (si N==M), o un vector de dos coordenadas con entradas ordenadas de lo contrario.

Entonces, si el número #sde coordenadas en ses solo uno, obtenemos 1(verdad). De lo contrario, primesdevolverá un vector de todos los números primos en el intervalo cerrado de s[1]a s[2]. La negación !de eso dará 1si el vector está vacío, mientras que la negación de un vector de una o más entradas distintas de cero (aquí uno o más primos) dará 0.

Jeppe Stig Nielsen
fuente
2

JavaScript (ES6), 57 56 bytes

Toma entrada en la sintaxis de curry (a)(b). Devoluciones 0o 1.

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

Casos de prueba

¿Cómo?

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()
Arnauld
fuente
2

R , 63 46 bytes

-17 por Giuseppe

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

Pruébalo en línea!

Aplicación bastante simple de la solución Jelly de ETHProductions . La principal conclusión interesante es que con los vectores booleanos R any(x)==all(x)es equivalente a min(x)==max(x).

Criminalmente vulgar
fuente
Además, dado que min(x)==max(x)es equivalente a verificar que todos los elementos is_prime(a:b)sean iguales, podemos usar este último truco para reducirlo a 46 bytes con primesel numberspaquete o el .
Giuseppe
2

C (gcc), 153146 bytes

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 de Jonathan Frech

Define una función hque toma dos intsy devuelve 1verdadero y 0falso

Pruébalo en línea!

n es una función que devuelve 1 si su argumento no es primo.

g es una macro que establece su primer y segundo argumento en el siguiente primo menor y mayor que (respectivamente) su tercer argumento

hlo hace gpara ambas entradas y comprueba si las salidas son las mismas.

pizzapants184
fuente
return a==c&&b==d;puede ser return!(a-c|b-d);.
Jonathan Frech
146 bytes .
Jonathan Frech
@JonathanFrech Se corrigió el enlace TIO.
pizzapants184
1

APL (Dyalog Unicode) , 18 + 16 = 34 24 bytes

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

Pruébalo en línea!

Gracias a Adám por 10 bytes.

La línea ⎕CY'dfns'( C OP Y se necesita) para importar los dfns ( d ynamic f unctio ns ) de recogida, incluido con defecto Dyalog APL instala.

Cómo funciona:

∧/=/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.
J. Sallé
fuente
1

C (gcc) , 103 bytes 100 bytes

i,j,p,s;f(m,n){s=1;for(i=m>n?i=n,n=m,m=i:m;i<=n;i++,p?s=m==n:0)for(p=j=2;j<i;)p=i%j++?p:0;return s;}

Pruébalo en línea!

gastropner
fuente
0

Haskell , 81 bytes

Una solución sencilla:

p z=[x|x<-z,all((0/=).mod x)[2..x-1]]!!0
c x=(p[x-1,x-2..],p[x+1..])
x!y=c x==c y

Pruébalo en línea!

usuario28667
fuente
0

Mathematica, 39 27 26 bytes

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

Expandido:

                         &  # 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?

Uso:

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}  *)

Contribuciones: -12 bytes por Jenny_mathy , -1 byte por Martin Ender

Eric Towers
fuente
Esto solo verifica el próximo prime. Pruebe NextPrime [#, {- 1,1}]
J42161217
@ Jenny_mathy: veo que tienes razón. Atrapado por el caso de prueba "348, 347", que ahora se demuestra que pasa.
Eric Towers el
27 bytes: Equal@@NextPrime[#,{-1,1}]&toma como entrada [{N,M}]o si desea mantener la entrada original, use estos 30 bytes:Equal@@NextPrime[{##},{-1,1}]&
J42161217
@Jenny_mathy: Bueno, ..., la entrada especificada es de dos números enteros, no es una lista, así que ...
Eric Torres
1
@EricTowers tomando una lista está bien . Además, puede guardar un byte utilizando la notación infija #~NextPrime~{-1,1}.
Martin Ender
0

J , 15 bytes

-:&(_4&p:,4&p:)

Cómo funciona:

   &(           ) - applies the verb in the brackets to both arguments
            4&p:  - The smallest prime larger than y
      _4&p:       - The largest prime smaller than y
           ,      - append
 -:               - matches the pairs of the primes

Pruébalo en línea!

Galen Ivanov
fuente