일부 외로운 프라임


10

나도 알고 있지만 또 다른 주요 도전은 ...

관련

외로운 (또는 격리) 소수는 소수이다 p있도록 p-2, p+2, p-4, p+4... p-2k, p+2k몇 가지가 k모두 복합 있습니다. 우리는 그러한 소수를 10 번 고립 된 소수 라고 부릅니다 k.

예를 들어, 5 회 분리 된 소수는 211모두 201, 203, 205, 207, 209, 213, 215, 217, 219, 221합성 이므로 입니다. ( p-2*5=201, p-2*4=203등)

도전

두 개의 입력 정수가 주어지면 n > 3k > 0보다 작은 kth-times-isolated 소수를 출력합니다 n.

예를 들어, for k = 5nrange의 범위 내 4 ... 210에서 출력은 211입력보다 엄격하게 가장 큰 5 번째로 고립 된 가장 작은 소수이므로 출력이되어야합니다 n.

n=55 k=1
67

n=500 k=1
503

n=2100 k=3
2153

n=2153 k=3
2161

n=14000 k=7
14107

n=14000 k=8
14107

규칙

  • 해당되는 경우 입력 / 출력이 해당 언어의 기본 정수 유형에 적합하다고 가정 할 수 있습니다.
  • 입력 및 출력은 편리한 방법 으로 제공 할 수 있습니다 .
  • 전체 프로그램 또는 기능이 허용됩니다. 함수 인 경우 출력하지 않고 출력을 반환 할 수 있습니다.
  • 표준 허점 은 금지되어 있습니다.
  • 이것은 이므로 모든 일반적인 골프 규칙이 적용되며 가장 짧은 코드 (바이트)가 이깁니다.

3 차 절연 프라임도 2 차 절연 프라임입니까?
아웃 골퍼 Erik

@EriktheOutgolfer 마지막 ​​두 테스트 사례는 실제로이를 확인하는 것으로 보입니다.
케빈 크루이 센

1
@KevinCruijssen 테스트 케이스는 챌린지 사양의 일부가 아닙니다.
아웃 골퍼 Erik

1
@EriktheOutgolfer 그렇습니다. kth-times-isolated 역시 정의상 k-1th, k-2th 등입니다.
AdmBorkBork

@AdmBorkBork 감사합니다.
아웃 골퍼 Erik

답변:


3

젤리 , 17 13 바이트

_æR+⁼ḟ
‘ç1#Ḥ}

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

작동 원리

‘ç1#Ḥ}  Main link. Left argument: n. Right argument: k

‘       Increment; yield n+1.
    Ḥ}  Unhalve right; yield 2k.
 ç1#    Call the helper link with arguments m = n+1, n+2, ... and k until 1 one
        them returns a truthy value. Return the matching [m].


_æR+⁼ḟ  Helper link. Left argument: m. Right argument: k

_       Subtract; yield m-2k.
   +    Add; yield m+2k.
 æR     Prime range; yield the array of primes in [m-2k, ..., m+2k].
     ḟ  Filterfalse; yield the elements of [m] that do not occur in [k], i.e., [m]
        if m ≠ 2k and [] otherwise.
        The result to the left will be non-empty when m = 2k, as there always is
        a prime in [0, ..., 2m], since m > n > 3.
    ⁼   Test the results to both sides for equality.
        This yields 1 iff m is the only prime in [m-2k, ..., m+2k].

3

껍질 , 13 바이트

ḟ§=;ofṗM+ṡD⁰→

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

설명

꽤 직설적 인.

ḟ§=;ofṗM+ṡD⁰→  Inputs are k and n.
            →  Increment n
ḟ              and find the first number m >= n+1 such that:
         ṡD⁰    Take symmetric range [-2k,..,2k].
       M+       Add m to each.
    ofṗ         Keep those that are prime.
 §=             Check equality with
   ;            the singleton [m].

2

자바 8 144 143 바이트

(n,k)->{for(k*=2;;)if(p(++n)>1){int i=-k;for(;i<=k&p(n+i)<2|i==0;i+=2);if(i>k)return n;}}int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

설명:

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

(n,k)->{                      // Method with two integer parameters and integer return-type
  for(k*=2;                   //  Multiply `k` by 2
      ;)                      //  Loop indefinitely
    if(p(++n)>1){             //   Increase `n` by 1 before every iteration with `++n`
                              //   And if it's a prime:
      int i=-k;for(;i<=k      //    Loop `i` from `-k` to `k` (inclusive)
        &p(n+i)<2|i==0;       //    As long as `n+i` is not a prime (skipping `n` itself)
        i+=2);                //    And iterate in steps of 2 instead of 1
      if(i>k)                 //    If we've reached the end of the loop:
        return n;}}           //     We've found our result, so return it

// Separated method to check if `n` is a prime
// `n` is a prime if it remained unchanged, and not when it became 0 or 1
int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}


2

Stax , 14 바이트

åΣ▀ë F▬&■º↔╔^∞

실행 및 디버깅

이것은 해당 ASCII 표현입니다.

w^x:r{Hn+|p_!=m0#

w                   while; run the rest of the program until a falsy value remains
 ^                  increment candidate value.
  x:r               [-x, ..., -1, 0, 1, ... x] where x is the first input
     {        m     map using block, using k from -x to x
      Hn+           double and add to candidate value - this is "p+2k"
         |p         is it prime? produces 0 or 1
           _!       k is zero?
             =      two values are equal; always true for a passing candidate
               0#   any falses left after mapping? if so, continue running

2

자바 스크립트 (Node.js) , 94 92 89 바이트

f=(n,k)=>(Q=y=>y<-k||(P=(a,b=2)=>a>b?a%b&&P(a,b+1):1)(n+2*y)^!!y&&Q(--y))(k,++n)?n:f(n,k)

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

이상하게도, 추가 골프는 스택 오버플로를 초래합니다. 이것은 14000 크기에서만 작동합니다.

마지막으로 14000에서 스택 오버플로가 발생하지 않는 골프가 하나 있습니다.

설명

f=(n,k)=>            // Two inputs
 (Q=y=>              // Function checking whether all numbers in 
                     // [n-2*k, n+2*k] except n are all composite
  y<-k               // The counter runs from k to -k
                     // If none breaks the rule, return true
  ||(P=(a,b=2)=>     // Function checking primality
   a>b?              // Check if a>b
   a%b&&P(a,b+1)     // If a>b and a%b==0 return false, else proceed
   :1                // If a<=b return 1 (prime)
  )(n+2*y)^!!y       // If n+2*y is prime, then y must be 0
                     // If n+2*y is not prime, then y must be non-zero
                     // If none of the conditions are met, return false
  &&Q(--y)           // Else proceed to the next counter
 )
 (k,++n)?            // Add 1 to n first, then start the check
 n                   // If conditions are met, return n
 :f(n,k)             // Else proceed to the next n.


1

루비 + -rprime, 73 71 61 57 바이트

->n,k{n+=1;(-k..k).all?{|i|(i*2+n).prime?^(i!=0)}?n:redo}

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

배우는 것이 기분이 좋아요! 난 은 Using Integer#[]redo내가 PPCG 여기에 배운 기술을. 재미있는 기술의 잡초에서 길을 잃고 ...

-1 바이트 : 가장 중요도가 낮은 비트를 얻는 n%2대신 사용하십시오 n[0]. 감사합니다, Asone Tuhid !

-1 바이트 : 부울 식 대신 삼항 연산자를 사용하십시오. 감사합니다, Asone Tuhid !

-10 바이트 : 사용 밖으로 입력 방지하기 위해 XOR 연산자 .prime?를 두 번 ... 이건 그냥 많이 있습니다 Asone Tuhid 의 대답입니다. :)

-4 바이트 :의 짝수 값을 검사해도 아무런 해가 없습니다 n. Asone Tuhid 는 논스톱입니다.

언 골프 드 :

->n,k{
  n += 1;                   # Increment n
  (-k..k).all?{|i|          # In the set [n-2*k, n+2*k], is every number
    (i*2+n).prime? ^ (i!=0) #    EITHER prime XOR different from n itself?
  } ? n                     # If yes, return the current value of n
  : redo                    # Otherwise, restart the block
}


오 귀엽다! 메타 @ Mr.Xcoder에 대한 최신 정보를 받아 주셔서 감사합니다.
benj2240

1
71 바이트 . n%2보다 짧은 n[0]이 경우와 ?...:보다 짧을 수 있습니다&&...||
Asone Tuhid




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