Aumento de particiones Goldbach


9

La conjetura de Goldbach establece que:

cada número par que es mayor que 2 es la suma de dos primos.

Consideraremos que una partición Goldbach de un número n es un par de dos primos que se suman a n . Nos preocupan los números de aumentar la partición de Goldbach . Medimos el tamaño de las particiones Goldbach de un número por el tamaño del primo más pequeño en todas las particiones de ese número. Un número es de partición creciente si este tamaño es mayor que el tamaño de todos los números pares más pequeños.

Tarea

Dado un número entero n> 2 , determine si n aumenta la partición de Goldbach y genere dos valores únicos, uno si es y otro si no lo es.

Este es el , por lo que debe intentar minimizar la cantidad de bytes en su código fuente.

OEIS A025018



Es una buena pregunta, eso es difícil de entender. Lo edité para simplificar la redacción. Verifíquelo y, si todo está correcto, aplique los cambios.
Евгений Новиков

1
@ ЕвгенийНовиков Su edición me pareció más confusa que la original. Lo he rechazado Quizás podamos discutir una forma de aclarar esto aquí .
Ad Hoc Garf Hunter

Los ejemplos trabajados siguen siendo muy confusos: parecen extraer números de la nada y cada una de las comparaciones se expresa de manera diferente sin explicar por qué se usan ciertos números. Si ya sabe la respuesta, puede averiguarlo. . . lo cual hice volviendo al primer párrafo, ignorando los ejemplos hasta que quedó claro, luego descubrí cómo se construyeron los ejemplos. Tal vez alguna estructura tabular ayudaría, también incluir 10 probablemente ayudaría
Neil Slater

@NeilSlater Gracias por los comentarios. Eliminé los ejemplos por completo porque creo que estaban haciendo más daño que bien. Creo que el desafío es claro por la explicación, y los ejemplos solo complican las cosas. Si la explicación no es suficiente , estaría más que feliz de ampliar o aclarar sobre eso, sin embargo, no creo que vuelva a agregar los ejemplos porque parecen ser la mayor fuente de confusión hasta ahora.
Ad Hoc Garf Hunter

Respuestas:


5

Jalea , 12 bytes

ÆRðfạṂ
Ç€M⁼W

Pruébalo en línea!

Cómo funciona

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

Pruébalo en línea!

Expandido

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

Pruébalo en línea! Verifique todos los números hasta 1000


3

JavaScript (ES6), 135 bytes

Utiliza una lógica similar a la respuesta PHP de Jörg .

(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

Manifestación


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

(gracias a OP)

(gracias a @Rod) (otra vez) (y otra vez)


@Olmman, ¿te gusta?
enedil

@Rod ya que maxcon la clave devuelve el elemento con un valor máximo después de aplicar la clave, tuve que agregar la aplicación de función, pero aún así es más corta.
enedil

@ Rod y no puedo tomar sus sugerencias rangeya que nestá limitado dentro lambda.
enedil

@enedil De hecho, pero para el máximo, puedes usarmax(map(m,r[::2]))
Rod

1
No necesita nombrar fy, por lo tanto, puede guardar 2 bytes eliminando el f=.
Ad Hoc Garf Hunter

1

Python 3: 204 196 bytes

Bytes guardados gracias a: 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

Pruébalo en línea!


2
Unos cuantos consejos, la mayoría de las funciones incorporadas tienen gusto miny allpueden tomar generadores como argumentos, esto significa que min([...])se puede acortar a min(...)lo mismo con todos. También puede deshacerse de algunos espacios, particularmente el espacio en import *y cualquier espacio después de los aparatos ortopédicos, veo que tiene uno después range(g)y otro antes [i for i in ..., ninguno de los dos es necesario.
Ad Hoc Garf Hunter

^ Eso es increíble, no lo sabía
bendl

También puede hacer su primer cheque un poco más corto cambiándola a all(n%i for i in range(2,g)), pero usted tiene que cambiar range(g)a range(1,g)porque esto le da un falso positivo en 1.
Ad Hoc Garf Hunter
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.