우리는 주요 클러스터를 공유합니까?


10

프라임 클러스터 정수의 N 이상의 2가 가장 주요한 의해 형성된 한 쌍으로 정의 엄격 이하 N 및 최저 프라임 엄격 이상 N .

정수가 소수 자체 인 경우 위의 정의에 따라, 다음의 주요 클러스터가 소수의 쌍임을 참고 이전이후의 그것.

직무

두 개의 정수 정수 N , M ( N, M ≥ 3 )이 주어지면 NM 이 동일한 소수 군집 을 갖는지 여부에 따라 진실 / 거짓 값을 출력 합니다.

이것은 이므로 가능한 한 바이트 수를 줄이는 것이 목표입니다. 따라서 모든 프로그래밍 언어 에서 가장 짧은 코드가 승리합니다.

테스트 사례 / 예

예를 들어 9 의 주요 군집 은 다음 [7, 11]과 같습니다.

  • 7은 가장 높은 주요 엄격보다 낮은 9 , 및
  • 119 보다 엄격하게 가장 높은 소수 입니다.

마찬가지로 67 의 프라임 클러스터는 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

진실 / 거짓 값은 두 개의 고유 한 값이어야합니까, 아니면 프로그램의 출력에서 ​​진실 / 거짓 값으로의 매핑을 정의하고 많은 다른 값을 출력 (잠재적으로 무한대로) 할 수 있습니까?
Jonathan Frech

@JonathanFrech 의사 결정 문제 정의 당 진실 / 허위 , 반드시 일관된 것은 아니지만 분명하고 진실 / 허위
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

펄 6 , 52 바이트

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

그것을 테스트

넓히는:

{  # 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을 확인하는 데 12 초가 걸렸으며 취소하기 전에 1,000,001에서 5 분 또는 10 분 동안 분쇄했습니다. 귀하의 책임하에 사용 / 남용.


1
그 속도로 그것은 가능성이 높습니다 . 알다시피, 100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)밀레니아가 달려갑니다.
user202729 1

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이 숫자로 만든 "세트"는 1 좌표 벡터 (if N==M)이거나 정렬 된 항목이 있는 2 좌표 벡터입니다 .

그런 다음 #s좌표 의 수가 s하나이면 1(거의) 얻습니다 . 그렇지 않으면 primes에서 폐쇄 구간에있는 모든 소수의 벡터를 반환 s[1]하는 s[2]. 부정 !그의는 줄 것이다 1(여기에 하나 또는 그 이상의 소수) 하나 이상의 비 - 제로 항목의 벡터의 부정을 줄 것이다 동안 벡터, 비어있는 경우 0.


2

자바 스크립트 (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 바이트 로 줄일 수 있습니다 . primesnumbers
주세페

2

C (gcc), 153146 바이트

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

Jonathan Frech의 -7

함수 정의 h두 소요 int의 반환 1truthy과 0falsey 위해를

온라인으로 사용해보십시오!

n 인수가 소수가 아닌 경우 1을 리턴하는 함수입니다.

g 첫 번째와 두 번째 인수를 세 번째 인수보다 작거나 큰 다음 소수로 설정하는 매크로입니다.

h않는 g입력과 출력이 동일한 지 어떤지를 판정 모두.


return a==c&&b==d;일 수 있습니다 return!(a-c|b-d);.
Jonathan Frech


@JonathanFrech TIO 링크를 수정했습니다.
pizzapants184 :


1

APL (Dyalog Unicode) , 18 + 16 = 34 24 바이트

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

온라인으로 사용해보십시오!

Adám 덕분에10 바이트 동안 에 합니다.

⎕CY'dfns'( C OP Y가 )을 가져올 필요 dfns를 ( D ynamic F unctio NS ) 수집 기본적 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

매스 매 티카, 39 27 26 바이트

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

넓히는:

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

기여 : Jenny_mathy 에 의해 -12 바이트 , Martin Ender에 의해 -1 바이트


다음 프라임 만 확인합니다. NextPrime [#, {
-1,1

@Jenny_mathy : 당신이 맞아 보여요. "348, 347"테스트 사례에서 발견되었으며 이제 통과 한 것으로 나타났습니다.
에릭 타워

27 바이트 : Equal@@NextPrime[#,{-1,1}]&입력으로 사용 [{N,M}]하거나 원래 입력을 유지하려면이 30 바이트를 사용하십시오.Equal@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy : 음, ..., 지정된 입력은 목록이 아닌 두 개의 정수입니다.
Eric Towers

1
@EricTowers 는 목록을 작성하는 것이 좋습니다. 또한 infix notation을 사용하여 바이트를 저장할 수 있습니다 #~NextPrime~{-1,1}.
Martin Ender

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.