Zunehmende Goldbach-Partitionen

9

Die Goldbach-Vermutung besagt:

Jede gerade Zahl, die größer als 2 ist, ist die Summe zweier Primzahlen.

Wir betrachten eine Goldbach-Partition einer Zahl n als ein Paar von zwei Primzahlen, die zu n addieren . Wir befassen uns mit Zahlen der zunehmenden Goldbach-Partition . Wir messen die Größe der Goldbach-Partitionen einer Zahl an der Größe der kleinsten Primzahl in allen Partitionen dieser Zahl. Eine Zahl nimmt die Partition zu, wenn diese Größe größer ist als die Größe aller kleineren geraden Zahlen.

Aufgabe

Bestimmen Sie bei einer geraden Ganzzahl n> 2 , ob n die Goldbach-Partition erhöht, und geben Sie zwei eindeutige Werte aus, einen, wenn dies der Fall ist, und einen, wenn dies nicht der Fall ist.

Dies ist , daher sollten Sie versuchen, die Anzahl der Bytes in Ihrem Quellcode zu minimieren.

OEIS A025018

Ad-hoc-Garf-Jäger
quelle
Lassen Sie uns diese Diskussion im Chat fortsetzen .
Ad-hoc-Garf-Jäger
Es ist eine gute Frage, die schwer zu verstehen ist. Ich habe es bearbeitet, um den Wortlaut zu vereinfachen. Bitte überprüfen Sie es und übernehmen Sie Änderungen, wenn alles korrekt ist.
3вгений Новиков
1
@ ЕвгенийНовиков Ich fand Ihre Bearbeitung verwirrender als das Original. Ich habe es abgelehnt. Vielleicht können wir einen Weg diskutieren diese klarer machen hier .
Ad-hoc-Garf-Jäger
Die bearbeiteten Beispiele sind immer noch sehr verwirrend - sie scheinen Zahlen aus dem Nichts zu ziehen, und jeder der Vergleiche wird anders ausgedrückt, ohne zu erklären, warum bestimmte Zahlen verwendet werden. Wenn Sie die Antwort bereits kennen, können Sie sie herausfinden. . . Ich ging zum ersten Absatz zurück, ignorierte die Beispiele, bis es klar war, und fand dann heraus, wie die Beispiele aufgebaut waren. Vielleicht würde eine tabellarische Struktur helfen, auch 10 würde wahrscheinlich helfen
Neil Slater
@NeilSlater Danke für das Feedback. Ich habe die Beispiele vollständig entfernt, weil ich denke, dass sie mehr schaden als nützen. Ich denke, die Herausforderung ergibt sich aus der Erklärung, und die Beispiele erschweren die Dinge nur. Wenn die Erklärung nicht ausreicht, würde ich dies gerne erweitern oder klarstellen, aber ich glaube nicht, dass ich die Beispiele wieder hinzufügen werde, da sie bisher die größte Quelle der Verwirrung zu sein scheinen.
Ad-hoc-Garf-Jäger

Antworten:

5

Gelee , 12 Bytes

ÆRðfạṂ
Ç€M⁼W

Probieren Sie es online aus!

Wie es funktioniert

Ç€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.
Dennis
quelle
4

PHP , 154 Bytes

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

Probieren Sie es online aus!

Erweitert

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

Probieren Sie es online aus! Überprüfen Sie alle Nummern bis 1000

Jörg Hülsermann
quelle
3

JavaScript (ES6), 135 Byte

Verwendet eine ähnliche Logik wie Jörgs PHP-Antwort .

(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

Demo

Arnauld
quelle
2

Python 3: 156 151 142 138 136 128 Bytes

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

(danke an OP)

(danke an @Rod) (wieder) (und wieder)

enedil
quelle
@ Olmman gefällt es dir?
Ende
@ Rod, da maxmit key nach dem Anwenden des Schlüssels ein Element mit maximalem Wert zurückgegeben wird, musste ich eine Funktionsanwendung hinzufügen, die jedoch kürzer ist.
Ende
@ Rod und ich können Ihre Vorschläge nicht annehmen, rangeda nsie innen begrenzt sind lambda.
Ende
@enedil In der Tat, aber für das Maximum können Sie verwendenmax(map(m,r[::2]))
Rod
1
Sie müssen nicht benennen fund können somit 2 Bytes sparen, indem Sie das entfernen f=.
Ad-hoc-Garf-Jäger
1

Python 3: 204 196 Bytes

Bytes gespeichert dank: 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

Probieren Sie es online aus!

Bendl
quelle
2
Ein paar Tipps, die meisten eingebauten Funktionen mögen minund allkönnen Generatoren als Argumente verwenden, dies bedeutet, dass min([...])sie auf alle verkürzt werden können min(...). Sie können auch einige Leerzeichen entfernen, insbesondere das Leerzeichen in import *und jedes Leerzeichen nach Klammern. Ich sehe, Sie haben eines nach range(g)und eines vor [i for i in ..., beide sind nicht erforderlich.
Ad-hoc-Garf Hunter
^ Das ist großartig, das wusste ich nicht
Bendl
Sie können Ihren Prime Check auch etwas kürzer machen, indem all(n%i for i in range(2,g))Sie ihn in ändern. Sie müssen jedoch zu wechseln range(g), range(1,g)da dies am 1.
Uhr