Partageons-nous le cluster principal?


10

La grappe de choix d'un nombre entier N supérieur à 2 est défini comme étant le couple formé par le plus grand nombre premier strictement plus faible que N et le plus bas premier strictement supérieur à N .

Notez que suivant la définition ci-dessus, si l'entier est lui-même un nombre premier, alors son groupe principal est la paire des nombres premiers qui le précèdent et lui succèdent .

Tâche

Étant donné deux entiers entiers N , M ( N, M ≥ 3 ), émettent une valeur de vérité / fausse selon que N et M ont le même cluster principal.

Il s'agit de , l'objectif est donc de réduire autant que possible le nombre d'octets. Ainsi, le code le plus court dans chaque langage de programmation gagne.

Cas de test / Exemples

Par exemple, le premier groupe de 9 est [7, 11], car:

  • 7 est le plus haut premier strictement inférieur à 9 , et
  • 11 est le plus petit nombre premier strictement supérieur à 9 .

De même, le premier groupe de 67 est [61, 71](notez que 67 est un nombre premier).

Paires authentiques

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

Paires de fausses

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

Les valeurs de vérité / fausse doivent-elles être deux valeurs distinctes ou peut-on définir un mappage de la sortie de leur programme vers une valeur de vérité / fausse et produire (potentiellement à l'infini) de nombreuses valeurs différentes?
Jonathan Frech

@JonathanFrech Truthy / Falsy selon la définition du problème de décision , pas nécessairement cohérent mais distant et véridique / falsifié
M. Xcoder

Réponses:


14

Gelée , 6 4 3 5 4 octets

rÆPE

Essayez-le en ligne! ou Essayez tous les cas de test .

Comment ça fonctionne

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

Fonctionne parce que deux nombres ont des clusters premiers différents s'il y a un premier entre eux, ou l'un ou l'autre nombre est lui-même premier; sauf si les deux nombres sont identiques, auquel cas Eretourne 1quand même (tous les éléments d'un tableau à un seul élément sont égaux).


7
La source de vos programmes ne semble pas conviviale ...
Stan Strum

2

Perl 6 , 52 octets

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

Essaye-le

Étendu:

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

Rubis , 57 54 octets

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

Essayez-le en ligne!

Utilise l'horrible test de primalité des expressions rationnelles de ma réponse (que j'avais oublié jusqu'à ce que je clique dessus) à la question connexe. Ce nombre est-il un nombre premier? . Puisque nous avons N, M ≥ 3, la vérification de 1 peut être supprimée du modèle, ce qui fait que le nombre d'octets est inférieur à l'utilisation de la fonction intégrée.

Remarque: Le test de primalité des expressions rationnelles est pathologiquement, hilarante inefficace. Je crois que c'est au moins O (n!), Même si je n'ai pas le temps de le comprendre pour le moment. Il lui a fallu douze secondes pour vérifier 100 001 et broyait pendant cinq ou dix minutes sur 1 000 001 avant de l'annuler. Utilisez / abusez à vos propres risques.


1
À ce rythme, il est probable . Vous savez, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)ce qui prendra des millénaires pour fonctionner.
user202729

2

Rétine , 58 octets

\b(.+)¶\1\b

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

Essayez-le en ligne! Explication:

\b(.+)¶\1\b

Si les deux entrées sont identiques, supprimez simplement tout et passez à la sortie 1 à la fin.

.+
$*

Convertissez en unaire.

O`

Trier dans l'ordre.

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

Développez à une plage de tous les nombres.

A`^(11+)\1+$

Supprimez tous les numéros composites.

^$

S'il ne reste plus de chiffres, affichez 1, sinon 0.


2

PARI / GP, 28 octets

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

Essayez-le en ligne avec tous les cas de test!

Retourne 0ou 1(valeurs PARI / GP "booléennes" habituelles).

Explication:

vdoit être un vecteur (ou un vecteur de colonne ou une liste) avec les deux nombres Net Mcomme coordonnées. Par exemple [8, 10]. Alors ssera "l'ensemble" fait à partir de ces nombres, qui est soit un vecteur à une coordonnée (si N==M), soit un vecteur à deux coordonnées avec des entrées triées sinon.

Ensuite, si le nombre #sde coordonnées dans sest juste un, nous obtenons 1(véridique). Sinon, primesrenverra un vecteur de tous les nombres premiers dans l'intervalle fermé de s[1]à s[2]. La négation !de cela donnera 1si le vecteur est vide, tandis que la négation d'un vecteur d'une ou plusieurs entrées non nulles (ici un ou plusieurs nombres premiers) donnera 0.


2

JavaScript (ES6), 57 56 octets

Prend des entrées dans la syntaxe de curry (a)(b). Renvoie 0ou 1.

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

Cas de test

Comment?

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 octets

-17 par Giuseppe

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

Essayez-le en ligne!

Application assez simple de la solution Jelly d' ETHProductions . Le principal point à retenir est que, avec R, les vecteurs booléens any(x)==all(x)sont équivalents à min(x)==max(x).



De plus, comme cela min(x)==max(x)équivaut à vérifier que tous les éléments is_prime(a:b)sont égaux, nous pouvons utiliser cette dernière astuce pour le réduire à 46 octets avec le primesou le numberspackage.
Giuseppe

2

C (gcc), 153 146 octets

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

Définit une fonction hqui prend deux ints et renvoie 1pour true et 0pour falsey

Essayez-le en ligne!

n est une fonction qui renvoie 1 si son argument n'est pas premier.

g est une macro qui définit ses premier et deuxième arguments au premier premier inférieur et supérieur à (respectivement) c'est le troisième argument

hfait gpour les deux entrées et vérifie si les sorties sont les mêmes.


return a==c&&b==d;peut être return!(a-c|b-d);.
Jonathan Frech


@JonathanFrech Correction du lien TIO.
pizzapants184


1

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

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

Essayez-le en ligne!

Merci à Adám pour 10 octets.

La ligne ⎕CY'dfns'( C OP Y ) est nécessaire pour importer les dfns ( f onctio ns d ynamiques ), incluse dans les installations Dyalog APL par défaut.

Comment ça fonctionne:

∧/=/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 octets

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

Étendu:

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

Usage:

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

Contributions: -12 octets par Jenny_mathy , -1 octet par Martin Ender


Cela ne vérifie que le premier amorçage suivant. Essayez NextPrime [#, {- 1,1}]
J42161217

@Jenny_mathy: Je vois que vous avez raison. Pris par le cas de test "348, 347", qui est maintenant démontré pour réussir.
Eric Towers

27 octets: Equal@@NextPrime[#,{-1,1}]&prend en entrée [{N,M}]ou si vous souhaitez conserver l'entrée d'origine, utilisez ces 30 octets:Equal@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy: Eh bien, ..., l'entrée spécifiée est deux entiers, pas une liste, donc ...
Eric Towers

1
@EricTowers prend une liste, c'est bien . En outre, vous pouvez enregistrer un octet en utilisant la notation infixe #~NextPrime~{-1,1}.
Martin Ender

0

J , 15 octets

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

Comment ça fonctionne:

   &(           ) - 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

Essayez-le en ligne!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.