Goldbach 파티션 증가


9

Goldbach의 추측에 따르면

2보다 큰 짝수는 두 소수의 합입니다.

우리는 다수의 골드 바흐 파티션을 고려할 것 N 에 추가 두 소수 한 쌍의 수 N . 우리는 숫자가 Goldbach 파티션을 늘리는 것에 관심이 있습니다 . 우리는 숫자의 모든 Goldbach 파티션의 크기를 해당 숫자 파티션의 가장 작은 소수의 크기로 측정합니다. 이 크기가 모든 작은 짝수의 크기보다 크면 숫자가 파티션을 증가시킵니다.

직무

짝수의 정수 n> 2가 주어지면, n 이 Goldbach 파티션을 증가시키는 지 여부를 결정 하고, 하나는 존재하지 않으면 하나는 그렇지 않으면 하나를 출력합니다.

이것은 소스 코드의 바이트 수를 최소화해야합니다.

OEIS A025018



이해하기 어려운 좋은 질문입니다. 나는 표현을 단순화하기 위해 그것을 편집했다. 이를 확인하고 모두 올바른 경우 변경 사항을 적용하십시오.
Евгений Новиков

1
@ ЕвгенийНовиков 편집 내용이 원본보다 더 혼란 스러웠습니다. 나는 그것을 거부했다. 아마도 여기서 더 명확하게하는 방법을 논의 할 수있을 입니다.
Ad Hoc Garf Hunter

작동 한 예제는 여전히 혼란합니다-그들은 어디에서든 숫자를 가져 오는 것 같으며 특정 숫자가 사용되는 이유 를 설명하지 않고 각 비교가 다르게 표현 됩니다. 이미 답을 알고 있다면 알아낼 수 있습니다. . . 첫 번째 단락으로 돌아가서 명확해질 때까지 예제를 무시한 다음 예제 구성 방법을 알아 냈습니다. 아마도 테이블 형식의 구조가 도움이 될 것입니다. 10을 포함하면 아마 도움이 될 것입니다
Neil Slater

@NeilSlater 의견을 보내 주셔서 감사합니다. 나는 그들이 좋은 것보다 더 해를 끼쳤다 고 생각하기 때문에 예제를 완전히 제거했습니다. 나는 설명에서 도전이 분명하다고 생각하며, 그 예는 단지 복잡합니다. 설명 이 충분하지 않으면 확장하거나 명확 하게 설명하는 것이 더 좋을 것입니다. 그러나 예제가 지금까지 혼란의 가장 큰 원인 인 것처럼 보이기 때문에 다시 추가 할 것이라고 생각하지 않습니다.
Ad Hoc Garf Hunter

답변:


5

젤리 , 12 바이트

ÆRðfạṂ
Ç€M⁼W

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

작동 원리

Ç€M⁼W   Main link. Argument: n

Ç€      Map the helper link over [1, ..., n].
  M     Get all indices of the maximum.
    W   Wrap; yield [n].
   ⁼    Test the results to both sides for equality.


ÆRðfạṂ  Helper link. Argument: k

ÆR      Prime range; get all primes in R := [1, ..., k].
  ð     Begin a dyadic chain with arguments R and k.
    ạ   Absolute difference; yield k-p for each p in R.
   f    Filter; keep the q in R such that q = k-p for some p in R.
     Ṃ  Take the minimum.
        This yields 0 if the array is empty.

4

PHP , 154 바이트

for(;$n++<$a=$argn;$i-1?:$p[]=$n)for($i=$n;--$i&&$n%$i;);foreach($p as$x)foreach($p as$y)if(!$r[$z=$x+$y]){$r[$z]=$x;$l[]=$z<$a?$x:0;};echo$r[$a]>max($l);

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

넓히는

for(;$n++<$a=$argn;$i-1?:$p[]=$n) # loop through all integers till input if is prime add to array 
  for($i=$n;--$i&&$n%$i;);
foreach($p as$x) #loop through prime array
  foreach($p as$y) #loop through prime array 
    if(!$r[$z=$x+$y]){
      $r[$z]=$x; # add only one time lower value for a sum of $x+$y 
      $l[]=$z<$a?$x:0;}; # add lower value if sum is lower then input
echo$r[$a]>max($l); # Output 1 if lower value for sum of input is greater then all lower values of all numbers under input

온라인으로 사용해보십시오! 1000까지 모든 숫자 확인


3

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

Jörg의 PHP answer 와 유사한 논리를 사용합니다 .

(n,P=[...Array(n).keys()].filter(n=>(p=n=>n%--x?p(n):x==1)(x=n)))=>P.map(p=>P.map(q=>a[q+=p]=a[q]||(m=q<n&&p>m?p:m,p)),a=[m=0])&&a[n]>m

데모


2

파이썬 3 156 151 142 138 136 128 바이트

r=range
m=lambda n:min(x for x in r(2,n+1)if all(o%i for o in[x,n-x]for i in r(2,o)))
f=lambda n:m(n)>max(map(m,r(2,n,2)))or n<5

(OP 덕분에)

(@Rod 덕분에) (다시) (그리고 다시)


@Olmman 마음에 드십니까?
enedil

@Rod max키를 적용 한 후 키가 최대 값을 가진 요소를 반환 하므로 함수 응용 프로그램을 추가해야했지만 그럼에도 짧습니다.
enedil

@Rod 나는에 대한 귀하의 제안을 할 수 range있기 때문에 n내부에 묶여있다 lambda.
enedil

@enedil 실제로, 그러나 최대를 위해 사용할 수 있습니다max(map(m,r[::2]))
Rod

1
이름 f을 지정할 필요가 없으므로 를 제거하여 2 바이트를 절약 할 수 있습니다 f=.
Ad Hoc Garf Hunter

1

파이썬 3 : 204 196 바이트

Olm Man 덕분에 바이트 절약

from itertools import*
m=lambda g:min([x for x in product([n for n in range(2,g)if all(n%i for i in range(2,n))],repeat=2)if sum(x)==g][0])
i=lambda g:1if all(m(g)>m(x)for x in range(4,g,2))else 0

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


2
몇 가지 팁 같은 대부분의 내장 기능 minall인수로 발전기를 취할 수 있습니다,이 수단 min([...])을 단축 할 수 min(...)모두와 동일. 또한 일부 공간, 특히의 공간을 제거 할 수 import *중괄호 뒤의 공간, 당신이 차례가 볼 range(g)전과 하나 [i for i in ..., 둘 필요하다.
Ad Hoc Garf Hunter

^ 굉장하다, 나는 몰랐다
bendl

또한 프라임 체크를로 변경하여 조금 더 짧게 만들 수 all(n%i for i in range(2,g))있지만 1로 오탐을 나타 내기 때문에 로 변경 range(g)해야 range(1,g)합니다.
Ad Hoc Garf Hunter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.