Czy dzielimy główny klaster?

10

Pierwsza klastra liczby całkowitej N wyższa niż 2 określa się jako parę utworzoną przez najwyższe pierwsza ściśle niższe niż N , a najniższa pierwsza ściśle większa niż N .

Zauważ, że zgodnie z powyższą definicją, jeśli liczba całkowita jest samą liczbą pierwszą, to jej klaster liczb pierwszych jest parą liczb pierwszych poprzedzających i następujących po niej.

Zadanie

Biorąc pod uwagę dwie liczby całkowite N , M ( N, M ≥ 3 ), wyprowadza wartość prawda / fałsz na podstawie tego, czy N i M mają tę samą grupę podstawową.

To jest , więc celem jest jak największe zmniejszenie liczby bajtów. W ten sposób wygrywa najkrótszy kod w każdym języku programowania .

Przypadki testowe / przykłady

Na przykład pierwsza grupa 9 to [7, 11], ponieważ:

  • 7 jest najwyższą liczbą pierwszą ściśle niższą niż 9 , a
  • 11 jest najniższą liczbą ściśle wyższą niż 9 .

Podobnie, główna grupa 67 to [61, 71](zauważ, że 67 jest liczbą pierwszą).

Prawdziwe pary

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

Pary Falsy

4, 5
6, 8
409, 401
348,347
419, 418
311, 313
326, 305
Pan Xcoder
źródło
Czy wartości prawda / fałsz muszą być dwiema odrębnymi wartościami, czy można zdefiniować odwzorowanie z wyników ich programu na wartość prawdy / fałsz i uzyskać (potencjalnie nieskończenie) wiele różnych wartości?
Jonathan Frech,
@JonathanFrech Truthy / Falsy według definicji problemu decyzyjnego , niekoniecznie spójny, ale odrębny i prawdomówny / falsy
Mr. Xcoder,

Odpowiedzi:

14

Galaretka , 6 4 3 5 4 bajtów

rÆPE

Wypróbuj online! lub Wypróbuj wszystkie przypadki testowe .

Jak to działa

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

Działa, ponieważ dwie liczby mają różne klastry liczb pierwszych, jeśli między nimi jest liczba pierwsza lub każda z nich jest liczbą pierwszą; chyba że obie liczby są takie same, w którym to przypadku i tak Ezwraca 1(wszystkie elementy w tablicy pojedynczych elementów są równe).

ETHprodukcje
źródło
7
Twoje źródło programów nie wygląda na przyjazne ...
Stan Strum,
2

Perl 6 , 52 bajtów

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

Sprawdź to

Rozszerzony:

{  # 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
źródło
2

Rubin , 57 54 bajtów

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

Wypróbuj online!

Używa okropnego testu pierwotności wyrażenia regularnego z mojej odpowiedzi (o której zapomniałem, dopóki nie kliknąłem) na powiązane pytanie Czy ta liczba jest liczbą pierwszą? . Ponieważ mamy N, M ≥ 3, czek dla 1 można usunąć ze wzoru, dzięki czemu liczba bajtów jest mniejsza niż przy użyciu wbudowanego.

Uwaga: Test pierwotności wyrażenia regularnego jest patologicznie, przezabawnie nieefektywny. Wydaje mi się, że jest to przynajmniej O (n!), Chociaż nie mam teraz czasu, aby to rozgryźć. Sprawdzanie 100,001 zajęło mu dwanaście sekund, a następnie szlifowałem przez pięć lub dziesięć minut na 1000,001, zanim go anulowałem. Używaj / wykorzystuj na własne ryzyko.

Przywróć Monikę - notmaynard
źródło
1
Przy takim tempie jest prawdopodobne . Wiesz, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)co potrwa tysiąclecia.
user202729,
2

Siatkówka , 58 bajtów

\b(.+)¶\1\b

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

Wypróbuj online! Wyjaśnienie:

\b(.+)¶\1\b

Jeśli oba wejścia są takie same, po prostu usuń wszystko i przejdź do wyjścia 1 na końcu.

.+
$*

Konwertuj na unary.

O`

Sortuj w kolejności.

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

Rozwiń zakres wszystkich liczb.

A`^(11+)\1+$

Usuń wszystkie liczby złożone.

^$

Jeśli nie ma już liczb, wyjmij 1, w przeciwnym razie 0.

Neil
źródło
2

PARI / GP, 28 bajtów

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

Wypróbuj online ze wszystkimi testami!

Zwraca 0lub 1(zwykłe wartości „boolowskie” PARI / GP).

Wyjaśnienie:

vmusi być wektorem (lub wektorem kolumny lub listą) z dwiema liczbami Ni Mjako współrzędne. Na przykład [8, 10]. Następnies będzie „zestaw” złożony z tych liczb, który jest albo wektorem jednej współrzędnej (jeśli N==M), albo wektorem dwóch współrzędnych z posortowanymi pozycjami w przeciwnym razie.

Następnie, jeśli liczba #swspółrzędnych sjest tylko jedna, otrzymujemy 1(prawda). W przeciwnym razie primeszwróci wektor wszystkich liczb pierwszych w zamkniętym przedziale od s[1]do s[2]. Negacja !tego da, 1jeśli wektor jest pusty, a negacja wektora jednego lub więcej niezerowych wpisów (tutaj jedna lub więcej liczb pierwszych) da 0.

Jeppe Stig Nielsen
źródło
2

JavaScript (ES6), 57 56 bajtów

Pobiera dane wejściowe w składni curry (a)(b). Zwraca 0lub 1.

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

Przypadki testowe

W jaki sposób?

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
źródło
2

R , 63 46 bajtów

-17 autorstwa Giuseppe

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

Wypróbuj online!

Dość prosta aplikacja rozwiązania galaretki ETHProductions . Główną interesującą rzeczą na wynos jest to, że z wektorami boolowskimi R any(x)==all(x)jest równoważne min(x)==max(x).

Kryminalnie Wulgarne
źródło
Ponadto, ponieważ min(x)==max(x)jest to równoważne ze sprawdzeniem, czy wszystkie elementy is_prime(a:b)są równe, możemy użyć tej ostatniej sztuczki, aby sprowadzić ją do 46 bajtów z pakietem primeslub numbers.
Giuseppe,
2

C (gcc), 153 146 bajtów

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 od Jonathana Frecha

Definiuje funkcję, hktóra przyjmuje dwa ints i zwraca 1prawdę i 0falsey

Wypróbuj online!

n jest funkcją, która zwraca 1, jeśli jej argument nie jest liczbą pierwszą.

g to makro, które ustawia pierwszy i drugi argument na pierwszą liczbę pierwszą mniejszą niż i większą niż (odpowiednio) jego trzeci argument

hrobi gdla obu wejść i sprawdza, czy wyjścia są takie same.

pizzapanty184
źródło
return a==c&&b==d;może być return!(a-c|b-d);.
Jonathan Frech,
146 bajtów .
Jonathan Frech,
@JonathanFrech Naprawiono łącze TIO.
pizzapants184
1

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

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

Wypróbuj online!

Dzięki Adám za 10 bajtów.

Linia ⎕CY'dfns'( C PO Y jest potrzebne) do importowania dfns ( d ynamic F unctio NS ) gromadzenia, dołączoną do domyślnej Dyalog APL instalacji.

Jak to działa:

∧/=/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é
źródło
1

Python 2 , 87 86 bajtów

lambda*v:v[0]==v[1]or{1}-{all(v%i for i in range(2,v))for v in range(min(v),max(v)+1)}

Wypróbuj online!

ovs
źródło
Podoba mi się twoje użycie zestawu, mimo że nie jest wymagane dla 87 bajtów .
Jonathan Frech,
@JonathanFrech mam go do 86 z użyciem zestawów
OVS
1

C (gcc) , 103 bajty 100 bajtów

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;}

Wypróbuj online!

gastropner
źródło
0

Haskell , 81 bajtów

Proste rozwiązanie:

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

Wypróbuj online!

użytkownik 28667
źródło
0

Mathematica, 39 27 26 bajtów

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

Rozszerzony:

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

Stosowanie:

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

Wkłady: -12 bajtów Jenny_mathy , -1 bajtów Martin Ender

Eric Towers
źródło
To sprawdza tylko następną liczbę pierwszą. Wypróbuj NextPrime [#, {- 1,1}]
J42161217
@Jenny_mathy: Widzę, że masz rację. Złapany przez przypadek testowy „348, 347”, który teraz został zaliczony.
Eric Towers,
27 bajtów: Equal@@NextPrime[#,{-1,1}]&pobiera jako dane wejściowe [{N,M}]lub jeśli chcesz zachować oryginalne dane wejściowe, użyj tych 30 bajtów:Equal@@NextPrime[{##},{-1,1}]&
J42161217
@Jenny_mathy: Cóż, ... określone dane wejściowe to dwie liczby całkowite, a nie lista, więc ...
Eric Towers
1
@EricTowers biorąc listę jest w porządku . Możesz także zapisać bajt, używając notacji infix #~NextPrime~{-1,1}.
Martin Ender
0

jot , 15 bajtów

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

Jak to działa:

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

Wypróbuj online!

Galen Iwanow
źródło