약한 프라임입니까?


26

가장 가까운 다른 소수가 소수보다 작 으면 소수가 약합니다. 동점이 있다면 소수는 약하지 않습니다.

예를 들어 , 71 은 소수이지만 75 는 복합 이므로 73 은 약한 소수 입니다.

태스크

입력 값이 2 보다 큰 소수 를 입력하면 이것이 약한 소수인지 결정 하는 컴퓨터 코드를 작성하십시오 . 이는 표준 이므로 두 경우 (예 : weaknot weak) 각각에 대해 두 개의 고유 한 값을 출력해야합니다 .

이것은 이므로 태그의 표준 규칙이 적용됩니다.

OEIS

첫 번째 약한 소수는 다음과 같습니다.

3, 7, 13, 19, 23, 31, 43, 47, 61, 73, 83, 89, 103, 109, 113, 131, 139, 151, 167, 181, 193, 199, 229, 233, 241, 271, 283, 293, 313, 317, 337, 349, 353, 359, 383, 389, 401, 409, 421, 433, 443, 449, 463, 467, 491, 503, 509, 523, 547, 571, 577, 601, 619, 643, 647

다음은 약한 소수에 대한 OEIS입니다 (반환해야 함 weak) OEIS A051635

균형 소수에 대한 OEIS는 다음과 같습니다 (반환해야 함 not weak) OEIS A006562

다음은 강력한 소수에 대한 OEIS입니다 (반환해야 함 not weak) OEIS A051634


not weak또는 strong?
CalculatorFeline

7
@CalculatorFeline 약하지 않다 강하다
밀 마법사

답변:



12

Mathematica, 24 바이트

n=NextPrime;2#+n@-#<n@#&

NextPrime내장 (AB는?) 그것을 부정적인 인수를 공급함으로써 이전의 소수를 계산하는 데 사용할 수 있습니다.


6

젤리 , 9 바이트

ḤÆRạÞ⁸ḊḢ>

반환 1약하고 대한 0(반품 약한하지 않거나 균형 1의 입력 2)

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

방법?

ḤÆRạÞ⁸ḊḢ> - Link: prime number > 2, p
Ḥ         - double -> 2*p
 ÆR       - yield primes between 2 and 2*p inclusive
     ⁸    - chain's left argument, p
    Þ     - sort by:
   ạ      -   absolute difference (i.e. distance from p)
      Ḋ   - dequeue (removes p from the list, since it has distance zero)
       Ḣ  - head (gives us the nearest, if two the smallest of the two)
        > - greater than p?

복잡한 솔루션으로 닌자를 사용했습니다.
Erik the Outgolfer

스플릿 초였습니다!
Jonathan Allan

1
아니, 그것은 9 초 전체 iirc이었다. 아니요, 10 초
Outgolfer Erik

그래서 (시간을보고) 내가 여기에 제출했을 때 일어났습니다 :)
Jonathan Allan

1
음, 그냥 (그것부터 먼저 이동 꽤 여행의 ... 나보다 더 빨리 golfed 것 같습니다 IIṠ⁼1II>0I<\) ... 당신은 많은 다른 생각입니다. 당신이 나와 다르게 생각하는 것 같습니다 ... 편집 : Pietu1998이 돌아 왔습니다!
Outgolfer Erik


3

옥타브, 93 84 바이트

바이트를 절약 해 준 @LuisMendo와 @ rahnema1에게 감사합니다!

function r=f(x);i=j=x;do--i;until(i<1|isprime(i));do++j;until(isprime(j));r=x-i<j-x;

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


당신은 i-=1등 을 사용할 수 없습니까 ? 또한 end기능에는 필요하지 않습니다. 바닥
글로


3

MATL , 13 바이트

qZq0)G_Yq+GE>

그렇지 않으면 1약한 경우 출력 합니다 0.

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

설명

q      % Implicit input, Subtract 1
Zq     % Vector of primes up to that
0)     % Get last one
G      % Push input again
_Yq    % Next prime
+      % Add
G      % Push input
E      % Multiply by 2
>      % Greater than? Implicit display

3

GNU APL 1.2, 78 바이트

∇f N
X←(R←(~R∊R∘.×R)/R←1↓⍳N×2)⍳N
(|R[X-1]-N)<|R[X+1]-N
∇

∇f N 인수를 취하는 함수를 선언합니다.

(~R∊R∘.×R)/R←1↓⍳N×2인수의 2에서 2까지의 모든 소수 목록을 제공합니다. 다음 프라임이 원본보다 두 배 미만이라고 가정합니다. 이것이 사실이 아닌 경우, N*2N 제곱을 제공하고 동일한 바이트 수를 취합니다. (프라임 찾기의 작동 방식에 대해서는 Wikipedia의 설명 참조)

X←(R←(...))⍳N해당 목록을 벡터에 할당하고 R(이전 내용을 덮어 쓰기) N해당 목록에서 원래 소수의 색인을 찾은 다음 해당 색인을에 할당합니다 X.

|R[X-1]-N이전 소수 간의 차이를 계산하고 ( R소수점을 포함하고 X-1th 요소가 이전 소수 N임) N절대 값을 취합니다 (APL은 오른쪽에서 왼쪽으로 작동).

|R[X+1]-N 똑같이하지만 다음 프라임을 위해.

(|R[X-1]-N)<|R[X+1]-N이전 소수가 다음 소수보다 원본에 더 가까운 경우 1을 인쇄하고 그렇지 않으면 0을 인쇄합니다. 우선 괄호가 필요합니다.

기능을 종료합니다.




2

펄 6 , 41 바이트

{[>] map ->\n{$_+n,*+n...&is-prime},1,-1}

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

$_함수에 대한 인수입니다. 매핑 함수 -> \n { $_ + n, * + n ... &is-prime }는 숫자를 가져와 소수에 도달하면 끝나는 n일련의 숫자 $_ + n, $_ + 2*n, ...를 반환합니다 . 두 숫자를 통해이 기능을 매핑 1하고 -1두 시퀀스의 시퀀스를 생성한다; 첫 번째는 $_ + 1보다 큰 첫 번째 소수로 $_시작 $_ - 1하고 끝나고 두 번째는 보다 작은 첫 번째 소수로 시작 하고 끝납니다 $_. [>]보다 큰 연산자로이 두 요소 목록을 줄이고 첫 번째 시퀀스가 ​​두 번째보다 큰 경우 (즉, 더 긴 경우) true를 반환합니다.


2

파이썬 2.7-120 바이트

from math import*
i=lambda x:factorial(x-1)%x==x-1
def f(n,c):return 1 if i(n-c)>i(n+c) else 0 if i(n+c)>0 else f(n,c+1)

파이썬에는 기본 제공 기능이 없기 때문에 Wilson의 정리를 사용하여 짧은 소수 검사기를 얻을 수 있습니다. 윌슨의 정리는 (n-1) 경우에만 숫자가 소수라고 말합니다! -1 mod (n)에 적합합니다. 따라서 함수 i는 숫자가 소수이면 1을 리턴하고 그렇지 않으면 0을 리턴합니다. 그런 다음 f 함수는 증가하지 않고 아래로 증가 할 때 해당 숫자의 다음 소수가 먼저 발생하는지 판별합니다. 증가 된 숫자 중 어느 것도 소수가 아니면 재귀 적으로 다시 호출됩니다.

일부 예제 I / O

f(3,1)
1
f(15,1)
0


2

정규식 (대부분의 풍미), 47 바이트

^(?=(x*)(?!(x+)(\2\2x)+$)\1)x+(?!(xx+)\4+$)\1\1

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

단항으로 입력합니다. 약한 소수에 대한 일치를 출력하고 약하지 않은 소수에 대한 일치를 출력하지 않습니다. ECMAScript, Perl, PCRE, Python, Ruby에서 작동합니다.

설명:

N을 입력으로, A를 가장 가까운 소수 <N, B를 가장 가까운 소수> N으로하자.이 문제에 대한 정규식 접근 방식의 주요 어려움은 B와 같이 입력보다 큰 숫자를 나타낼 수 없다는 것입니다. 2b + 1이 소수이고 2b + 1> N이되도록 2b + 1 = B가되도록 가장 작은 b를 찾으십시오.

(?=
  (x*)              # \1 = N - b, tail = b
  (?!(x+)(\2\2x)+$) # Assert 2b + 1 is prime
  \1                # Assert b ≥ \1 (and thus 2b + 1 > N)
)

그런 다음, 우리가 실제로 긴만큼 A.를 찾을 필요는 없습니다 어떤 프라임 <N 가까이 B보다 N에있다가, N은 약한 소수입니다.

x+                  # tail iterates over integers < N
(?!(xx+)\4+$)       # assert tail is prime
\1\1                # assert tail ≥ 2 * \1 (and thus tail + B > 2N)


1

자바 스크립트 ES6, 162 154 바이트

Jörg Hülsermann 의 트릭 "한 번에 아무것도 인쇄하지 않음" 에 따라 8 바이트가 절약 됩니다. ?"Y":"N"후 필요가 없습니다one<two

var isWeak=

a=>{p=[2];i=0;f=d=>{j=p[i];l:while(j++){for(x=0;p[x]*p[x]<=j;x++){if(j%p[x]==0){continue l}}return p[++i]=j}};while(p[i]<a+1){f()};return a*2<p[i]+p[i-2]}

[43,//true
53,//false
7901,//false
7907,//true
1299853,//true
1299869//false
].forEach(n=>{console.log(n,isWeak(n))})




0

자바 스크립트, 98 바이트

let test = _=>(o.innerHTML=f(+prime.value))
let f= 

n=>{P=n=>{for(i=n,p=1;--i>1;)p=p&&n%i};a=b=n;for(p=0;!p;P(--a));for(p=0;!p;P(++b));return n-a<b-n}
Enter Prime: <input id="prime">
<button type="button" onclick="test()">test if weak</button>
<pre id="o"></pre>

덜 골프

n=>{
   P=  // is a Prime greater than 1, result in p
       n=>{
           for(i=n,p=1;--i>1;)
               p=p&&n%i
       };

   a=b=n; // initialize lower and upper primes to n
   for(p=0;!p;P(--a)); // find lower,
   for(p=0;!p;P(++b)); // find upper,
   return n-a<b-n // is weak result
}

테스트 코드는 입력 "프라임"이 실제로 프라임인지 확인 하지 않습니다 .


0

braingasm , 23 22 바이트

1약한 소수와 0약하지 않은 것으로 인쇄 합니다 .

;>0$+L[->+>2[>q[#:Q]]]

연습 :

;                       Read a number to cell 0
 >0$+                   Go to cell 1 and copy the value of cell 0
     L                  Make the tape wrap around after cell 1
      [              ]  Loop:
       ->+>               Decrease cell 1 and increase cell 0
           2[       ]     Twice do:
             >              Go to the other cell
              q[   ]        If it's prime:
                #:Q         Print the current cell number and quit

0

줄리아 0.6, 64 바이트

g(x,i)=0∉x%(2:x-1)?1:1+g(x+i,i);x->g(x,1)&(g(x-1,-1)<g(x+1,1))

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