Cree una función, expresión o programa que haga lo siguiente:
- Toma los factores primos de cualquier número y súmalos. Por ejemplo, los factores primos de 28 son 2 2 7, sumados a 11.
- Multiplique el resultado por el número de factores primos para el número dado. Por ejemplo, 28 tiene 3 factores primos que suman 11. 11 * 3 es 33.
- Repita el proceso de forma recursiva, almacenando la lista resultante (que comienza con el número original), hasta llegar a un número que ya está incluido en la lista. Deténgase sin agregar ese número final, de modo que la lista no contenga duplicados. La progresión para 28 es 28 33, porque 33 resulta en 28 nuevamente.
- Cuente los elementos en la lista resultante. En el caso de 28, la respuesta es 2.
Aquí están los resultados para 0<n<=10
que pueda verificar su algoritmo.
2 1 1 10 1 11 1 9 5 10
(Como señaló Balpha, la respuesta para higley(1)
es 2, de la lista 1 0. Originalmente tenía 1, debido a un error en mi algoritmo original escrito en J.)
Como soy un SOB engreído y no he encontrado esto en OEIS , llamemos a esto la "secuencia de Higley", al menos durante la duración de esta ronda de golf de código. Como un bono adicional, encuentre los dos primeros que n
tienen el más bajo higley(n)
donde n
no es primo y n>1
. (Creo que solo hay dos, pero no puedo probarlo).
Este es un código de golf estándar, por lo que, como es habitual, ganan la menor cantidad de pulsaciones de teclas, pero le pido que vote por favor las respuestas inteligentes en otros idiomas, incluso si son detalladas.
highley(1) == 1
? Uno no tiene factores primos, por lo que la lista resultante en 4) es[1, 0]
, asíhighley(1) == 2
como lo veo.Respuestas:
J,
4745Es posible que esto sea mucho más corto sin usar
^:_
, pero mi cerebro ya está lo suficientemente frito.Editar: (47-> 45) Día de cupón doble.
Uso:
fuente
#@((~.@,((+/*#)@:q:)@{:)^:_)`2:@.(=&1)
que tiene 38 caracteres.{
,{.
, y{:
todas las cosas malas diferentes, pero{-
(por ejemplo) es sin duda una secuencia de dos cosas,{
y-
.Golfscript,
68 67 6261 caracteresEsta es una expresión: toma
n
la pila y deja el resultado en la pila. Para convertirlo en un programa que tomen
de stdin e imprima el resultado en stdout, reemplace el encabezado[
con~
El corazón de esto es
[.2@{1$1$%{)}{\1$/1$}if}*;;]
(28 caracteres) que toma el número superior en la pila y (mediante un algoritmo increíblemente ineficiente) genera una lista de sus factores primos. Pseudocódigo de estilo C equivalente:Lo
0+
justo antes{+}*
es manejar el caso especialn==1
, porque a Golfscript no le gusta doblar una operación binaria sobre la lista vacía.Uno de los puntos de fijación no primos es 27; Encontré esto sin usar el programa al considerar el mapeo (p a
->
a 2 p), que es un punto de referencia si a == p (a-1) / 2 , y probar pequeñoa
. (a==1
da la fijación de primos).Al buscar con el programa aparece un segundo punto fijo: 30 = (2 + 3 + 5) * 3
Apéndice: prueba de que solo hay dos puntos de fijación no primos
Notación:
sopfr(x)
es la suma de factores primos dex
, con repetición (A001414).Omega(x)
es el número de factores primos dex
(A001222). Entonces la función sucesora de Higley esh(x) = sopfr(x) Omega(x)
Supongamos que tenemos un punto fijo
N = h(N)
que es un producto den=Omega(N)
primos.N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
Teoría básica de números: se
n
divide enp_0 ... p_{n-1}
, por lo quew=Omega(n)
esos primos son los factores primos den
. Wlog los llevaremos a ser los últimosw
. Entonces podemos dividir ambos lados entren
y obtenerp_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}
o
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)
Dado que todos los números primos
p_0
ap_{n-w-1}
son mayores que 1, el aumento de cualquiera de ellos aumenta la LHS más que el RHS. Entonces, para un determinadon
, podemos enumerar todas las soluciones candidatas.En particular, no puede haber soluciones si el LHS es mayor que el RHS configurando todos los primos "libres" a 2. Es decir, no hay soluciones si
2^{n-w} > 2 (n-w) + sopfr(n)
Como
sopfr(n) <= n
(con igualdad solo para n = 4 o n primo), podemos hacer la afirmación más débil de que no hay puntos de fijación si2^{n-w} > 3 n - 2 w
Manteniendo
w
fijo podemos seleccionar diferentes valores den
satisfacciónw=Omega(n)
. El más pequeñon
es2^w
. Tenga en cuenta que si2^{n-w}
es al menos 3 (es decirn-w>1
, si , lo cual es cierto sin>2
), entonces aumentarn
mientras se mantienew
constante aumentará el LHS más que el RHS. Tenga en cuenta también que paraw>2
y tomando la menor cantidad posible,n
se satisface la desigualdad y no hay puntos de fijación.Eso nos deja con tres casos:
w = 0
yn = 1
;w = 1
yn
es primo; ow = 2
yn
es semi-prime.Caso
w = 0
.n = 1
, asíN
es cualquier primo.Caso
w = 1
. Sin = 2
entoncesN = 2p
y requerimosp = p + 2
, que no tiene soluciones. Sin = 3
entonces tenemospq = p + q + 3
y dos soluciones,(p=2, q=5)
y(p=3, q=3)
. Si esn = 5
así2^4 > 3 * 5 - 2 * 1
, entonces no hay más soluciones conw = 1
.Caso
w = 2
. Sin = 4
entoncesN = 4pq
y requerimospq = p + q + 4
. Esto tiene solución enterap=2, q=6
, pero no tiene soluciones principales. Si esn = 6
así2^4 > 3 * 6 - 2 * 2
, entonces no hay más soluciones conw = 2
.Todos los casos están agotados, por lo que los únicos puntos de fijación no primos son 27 y 30.
fuente
n
antes de que se cuente, ¿hay algún no primon
después de 49 para el que dicha secuencia no termine en 28?n
límiteshigley(n)
anteriores. (Eso permitiría simplificar considerablemente el ciclo, solo iterarf(n)
veces y luego descartar duplicados)Ruby, 92 caracteres
Esta solución supone que higley (1) es en realidad 2, no 1 (ver el comentario de balpha arriba):
fuente
Octava - 109 caracteres
fuente
MATL , 19 bytes
Pruébalo en línea!
fuente