프라임 트윈이 있습니까?


23

정수는 양수이고 정확히 2 개의 제수 (1과 그 자체)가있는 경우에만 소수 입니다. : 트윈 주요 쌍은 두 가지 요소로 구성되어 pp±2모두 소수이다.

입력으로 양의 정수가 제공됩니다. 당신의 임무는 주어진 정수가 표준 규칙 (값이 일관성이 있어야 함) 에 따라 쌍둥이 쌍에 속하는지 여부에 따라 진실 / 허위를 반환하는 것 입니다.

테스트 사례

  • Truthy (트윈 프라임) : 3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43

  • 허위 (트윈 프라임 아님) : 2, 15, 20, 23, 37, 47, 97, 120, 566

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


13은 프라임 쌍둥이입니까?
LiefdeWen

@LiefdeWen 네, 그것은 쌍에 속하기 때문에 (11, 13)
daniero

답변:



11

젤리 , 10 9 바이트

%6+_2_ÆP⁺

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

배경

제외 (3, 5) 의 모든 쌍 프라임 쌍의 형식은 (- 1, 1 + 6K 6K) .

이후 + (6K - 1) 6 % - - (1 6K) 3 = 6K - 3 = 6K + - 1 + 5 (1)
(+ 1 6K) + (6K + 1) % 6 - 6 = 6K + 1 + 1 -3 = 6k-1 이면 입력 n> 3이 주어지면 nn + n % 6 -3 이 모두 소수 인지 확인하는 것으로 충분합니다 .

이 공식은 어떻게됩니까 에 대한 작업 N = 3 으로,뿐만 아니라 3 = 3-3 + 3 % (6) 소수와 3 쌍둥이 소수입니다.

작동 원리

%6+_2_ÆP⁺  Main link. Argument: n

%6         Compute n%6.
  +        Add n to the result.
   _2      Subtract 2.
     _ÆP   Subtract 1 if n is prime, 0 if not.
           If n is not a prime, since (n + n%6 - 2) is always even, this can only
           yield a prime if (n + n%6 - 2 = 2), which happens only when n = 2.
        ⁺  Call ÆP again, testing the result for primality.

7

파이썬 3 , 53 바이트

lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2

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

배경

모든 정수는 정수 k : 6k-3 , 6k-2 , 6k-1 , 6k , 6k + 1 , 6k + 2 의 다음 형식 중 하나를 사용합니다 .

이후 6K - 2 , 6K6K + 2 는 모두 심지어 이후있는 3 - 6K 로 나누어 3 를 제외한 모든 소수, 23 형태이어야 6K - 1 또는 6K + 1 . 트윈 소수 쌍의 차이는 2 이므로 (3, 5)를 제외 하고 모든 트윈 소수 쌍은 (6k-1, 6k + 1) 형식 입니다.

하자 N 의 형식이 될 6K ± 1 .

  • 만약 N = -1 6K 다음 N + N 6 % - 3 = 6K - 1 + (6K - 1) 6 % - 3 = 6K - + 5 1 - 3 = 1 + 6K .

  • 만약 N = + 6K 한, N + N 6 % - 3 = 6K + 1 + (1 + 6K) 6 % - 3 = 6K + 1 + 1 - 3 = 6K - 1 .

따라서, 경우 n은 트윈 주요 쌍의 일부 N ≠ 3 , 그것의 쌍둥이가 될 것입니다 N + N % 6-3 .

작동 원리

파이썬에는 내장 테스트가 없습니다. 단일 숫자에 대해 소수를 테스트하는 방법은 짧지 만 두 숫자에 대해서는 그렇게하는 데 시간이 오래 걸립니다. 대신 제수와 함께 작업 할 것입니다.

sum((n+n%6-3)*n%k<1for k in range(2,4*n))

구간 [2, 4n) 나누기 (n + n % 6-3) n 에서 정수 k 의 개수를 균등하게 계산합니다. 즉, 간격 [2 에서 (n + n % 6-3) n 의 제수를 계산합니다. , 4n) . 우리는 n 이 트윈 소수 쌍의 일부인 경우에만 이 개수가 2 라고 주장합니다 .

  • 만약 N = 3 (a 쌍둥이 소수), (N + N 6 % - 3) N = 3 (3 + 3 - 3) = 9 개의 제수 (갖는 39 에서) [2, 12) .

  • 경우 N> 3 , 앞서 본 바와 같이, 트윈 프라임이고 m = N + N % (6) - (3) 의 쌍이다. 이 경우 mn 에는 정확히 4 개의 제수가 있습니다 : 1, m, n, mn .

    이후 N> 3 , 우리가 m> 4 , 그래서 4N <MN 정확히 두 제수 ( mn은 간격으로) 가을 [2 4N) .

  • 만약 N = 1 이어서, (N + N 6 % - 3) = N + 1 1 - 3 = -1 에는 제수 없다 [2, 4) .

  • 만약 N = 2 , 그 다음 (N + N 6 % - 3) N = 2 (2 + 2 - 3) = 2가 하나 개의 제수 (자체)를 갖는다 [2, 8) .

  • 만약 N = 4 , 다음 (N + N 6 % - 3) N = 4 (4 + 4 - 3) = 20이 네 제수 (갖는 2 , 4 , 510 에서) [2, 16) .

  • 경우 N> 4 짝수 인 2 , N / 2 , 및 N 모든 분할 N , 따라서, N - (N + 3, N 6 %) . 우리는 n > 4 이기 때문에 n / 2> 2가 있으므로 [2, 4n) 에는 적어도 3 개의 제수가 있습니다.

  • n = 9 인 경우 , [2, 36) 에서 (n + n % 6--3) n = 9 (9 + 3-3 ) = 81 은 세 개의 제수 ( 3 , 921 )를 갖습니다 .

  • 경우 N> (9) 의 배수 (3) 다음, 3 , N / 3 , 및 N 모든 분할 N , 따라서, 및 N - (3 ~ 6 %, N + N) . 우리는이 N / 3> 3 이후 N> 9 , 그래서 적어도 세 제수있다 [2, 4N)은 .

  • 마지막으로, n = 6k ± 1> 4쌍소 수가 아닌 경우 n 또는 m : = n + n % 6-3은 복합이어야하므로 적절한 제수 d> 1을 인정해야합니다 .

    어느 이후 N = m + 2 또는 m = N + 2n은 m> 4 의 정수 거라고 , m을 , 그리고 N 있는 별개 의 제수 MN . 또한, n> 1 이후 m <n + 3 <4n 이므로 , mn[2, 4n) 에서 3 개 이상의 제수를 갖습니다 .


와우. 이러한 짧은 코드와 많은 특수한 경우 올바르게 처리해야합니다. 파이썬 3이라고 말하는 이유가 있습니까? 내가 알 수있는 한 그것은 파이썬 2에서도 작동합니다.
kasperd

예, 이것은 Python 2에서도 잘 작동합니다. 3 은 TIO에서 자동 생성 된 SE 게시물의 일부입니다.
Dennis


4

PHP, 52 바이트

<?=($p=gmp_prob_prime)($n=$argn)&&$p($n+2)|$p($n-2);

GMP 없음, 84 바이트

( 스택 오버플로에서 주요 기능 사용 )

<?=p($n=$argn)&&p(2+$n)|p($n-2);function p($n){for($i=$n;--$i&&$n%$i;);return$i==1;}

로 파이프로 실행하십시오 -nF. 허위, 진실에 1대한 빈 출력 .

PHP로 포트 된 Dennis의 훌륭한 솔루션 , 56 바이트

while($i++<4*$n=$argn)($n+$n%6-3)*$n%$i?:$s++;echo$s==3;

파이프로 실행 -nR하거나 온라인으로 사용해보십시오 .



3

MATL , 11 바이트

HOht_v+ZpAa

출력은 0또는 1입니다.

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

설명

H    % Push 2
O    % Push 0
h    % Concatenate horizontally: gives [2 0]
t_   % Push a negated copy: [-2 0]
v    % Concatenate vertically: [2 0; -2 0]
+    % Add to implicit input
Zp   % Isprime
A    % All: true for columns that only contain nonzeros
a    % Any: true if there is at least a nonzero. Implicit display


2

망막 , 45 44 바이트

.*
$*
11(1+)
$1¶$&¶11$&
m`^(11+)\1+$

1<`1¶1

입력 값이 쌍 소수 인 경우 1을, 그렇지 않으면 0을 리턴합니다.

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

설명

.*              
$*

단항으로 변환

11(1+)          
$1¶$&¶11$&

n-2, n 및 n + 2를 자체 행에 넣습니다.

m`^(11+)\1+$   

(트레일 링 개행) 1보다 큰 모든 합성물 제거

1<`1¶1          

2 개의 연속 소수가 있는지 확인하십시오 (또는 3이 쌍소 소수이므로 1,3)


2

펄 6 , 24 바이트

?(*+(0&(-2|2))).is-prime

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

*이 익명 함수에 대한 인수입니다. 0 & (-2 | 2)숫자 0AND -2또는 OR 로 구성된 접점 2입니다. *이 접점에 추가 하면 숫자 *와 숫자 * - 2OR 중 하나의 접점이 생성 * + 2됩니다. is-prime이 정션 에서 메소드를 호출하면 *소수이고 * - 2OR * + 2이 소수 이면 참 값을 리턴합니다 . 마지막으로, ?진실한 정션을 부울 값 으로 축소하여 일관된 반환 값 조건을 충족시킵니다.


2

Jared Smith 덕분에 JavaScript, 91 바이트 , 81 바이트

p=n=>{for(i=2;i<n;)if(n%i++==0)return !!0;return n>1},t=n=>p(n)&&(p(n+2)||p(n-2))

설명

p주어진 숫자 n가 소수인지 또는 t주어진 숫자 n와를 테스트 n±2합니다.


함수 정의에서 var, 괄호로 묶지 않아도 됩니다 n.
Jared Smith

난 당신의 값을 표시하도록 조각을 편집 할 수 있다고 생각 n의 값 옆에 t(n)증가 선명도 (. 예에 대한 7: true)
테일러 스콧

1
둘 모두에게 감사
Serge K.

1

J, 23 바이트

1&p:*.0<+/@(1 p:_2 2+])

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

방법?

1&p:                               is the arg a prime?
    *.                             boolean and
                                   one of +2 or -2 also a prime
                     (1 p:_2 2+])  length 2 list of booleans indicating if -2 and +2 are primes
               @                   pipe the result into...
      0<+/                         is the sum of the elements greater than 0
                                   ie, at least one true

16 바이트3>0#.@p:0 2 _2&+
마일

@ 마일 좋은. 결과를 처리하기 위해 base 2를 매우 영리하게 사용합니다.
요나



1

자바 스크립트 (ES6), 54 바이트

a=x=>f(x)&(f(x+2)|f(x-2));f=(n,x=n)=>n%--x?f(n,x):x==1


1

엑셀 VBA, 102 100 바이트

VBA에 기본 제공 기능이 없습니다. :(

암호

셀에서 입력을 가져 와서 (거짓) 또는 (거짓) VBE 즉시 창으로 [A1]출력 하는 익명 VBE 즉시 창 기능10

a=[A1]:?p(a)*(p(a-2)Or p(a+2))

도우미 기능

Function p(n)
p=n>2
For i=2To n-1
p=IIf(n Mod i,p,0)
Next
End Function

또는 122 바이트

암호

재귀 우선 성 검사 기능 기반 솔루션

a=[A1]:?-1=Not(p(a,a-1)Or(p(a-2,a-3)*p(a+2,a+1)))

도우미 기능

Function p(n,m)
If m>1Then p=p(n,m-1)+(n Mod m=0)Else p=n<=0
End Function

0

Mayube 덕분에 PHP, 85 바이트 24 바이트

e($n){return f($n)&&((f($n-2)||f($n+2)))
f($n){for($i=$n;--$i&&$n%$i;)return $i==1;}

이것은 1 개 캐릭터 모두 함수의 이름을 변경함으로써 상당히 각 (예를 golfed 가능 a하고 b)
Skidsdev

2
PHP는 function더 이상 키워드 가 필요 하지 않습니까?
Titus


0

Japt , 13 바이트

j ©[U+2U-2]dj

반품 truefalse 여부 번호는 주요 쌍둥이 쌍의 일부입니다.

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

설명

암시 적 : U= 입력 정수

j ©

입력이 프라임 ( j), AND ( ©) 인지 확인하십시오 ...

[U+2U-2]dj

배열을 사용하여 기본 기능 ( ) 에 따라 [U+2, U-2]항목이 참 ( d) 인지 확인하십시오 j.

의 부울 결과에 대한 암시 적 출력 is input prime AND is any ±2 neighbor prime.


흠 ... [U+2U-2]훨씬 짧아 질 것 같지만 어떻게 알아낼 수
없나
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.