Crie uma função, expressão ou programa que faça o seguinte:
- Pegue os fatores primos de qualquer número e some-os. Por exemplo, os fatores primos de 28 são 2 2 7, somados a 11.
- Multiplique o resultado pelo número de fatores primos para o número fornecido. Por exemplo, 28 tem 3 fatores primos que somam 11. 11 * 3 é 33.
- Repita o processo recursivamente, armazenando a lista resultante (que começa com o número original), até chegar a um número que já está incluído na lista. Pare sem adicionar esse número final, para que a lista não contenha duplicatas. A progressão para 28 é 28 33, porque 33 resulta em 28 novamente.
- Conte os elementos na lista resultante. No caso de 28, a resposta é 2.
Aqui estão os resultados para 0<n<=10
, para que você possa verificar seu algoritmo.
2 1 1 10 1 11 1 9 5 10
(Como apontou balpha, a resposta para higley(1)
2 é da lista 1 0. Eu originalmente tinha 1, devido a um erro no meu algoritmo original escrito em J.)
Como sou um SOB vaidoso e ainda não o encontrei no OEIS , vamos chamá-lo de "Higley Sequence", pelo menos durante a rodada deste código de golfe. Como um bônus adicional, encontre os dois primeiros n
com o menor higley(n)
onde n
não é primo e n>1
. (Acho que existem apenas dois, mas não posso provar.)
Esse é o código padrão do golfe, portanto, como sempre, o menor número de pressionamentos de teclas vence, mas eu peço que você promova respostas inteligentes em outros idiomas, mesmo que sejam detalhadas.
highley(1) == 1
? Como não temos fatores primos, a lista resultante em 4) é[1, 0]
, pelohighley(1) == 2
que vejo.Respostas:
J,
4745É possível que isso seja muito mais curto sem o uso
^:_
, mas meu cérebro já está suficientemente frito.Edit: (47-> 45) Dia do cupom duplo.
Uso:
fonte
#@((~.@,((+/*#)@:q:)@{:)^:_)`2:@.(=&1)
38 caracteres.{
,{.
, e{:
todas as coisas médios diferentes, mas{-
(por exemplo) é definitivamente uma sequência de duas coisas,{
e-
.Golfscript,
68 67 6261 caracteresEsta é uma expressão: assume
n
a pilha e deixa o resultado na pilha. Para transformá-lo em um programa que usan
stdin e imprime o resultado em stdout, substitua o líder[
por~
O coração disso é
[.2@{1$1$%{)}{\1$/1$}if}*;;]
(28 caracteres), que leva o número superior da pilha e (por um algoritmo incrivelmente ineficiente) gera uma lista de seus principais fatores. Equivalente ao pseudocódigo no estilo C:O
0+
pouco antes{+}*
é tratar do caso especialn==1
, porque o Golfscript não gosta de dobrar uma operação binária na lista vazia.Um dos fixpoints não principais é 27; Descobri isso sem usar o programa considerando o mapeamento (p a
->
a 2 p), que é um ponto de correção se a == p (a-1) / 2 e tentando pequenoa
. (a==1
fornece a correção dos números primos).A pesquisa no programa gera um segundo ponto de correção: 30 = (2 + 3 + 5) * 3
Apêndice: prova de que existem apenas dois pontos de fixação não principais
Notação:
sopfr(x)
é a soma dos fatores primos dex
, com repetição (A001414).Omega(x)
é o número de fatores primos dex
(A001222). Portanto, a função sucessora de Higley éh(x) = sopfr(x) Omega(x)
Suponha que tenhamos um ponto de fixação
N = h(N)
que é um produto den=Omega(N)
números primos.N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})
Teoria básica dos números:
n
divide-se emp_0 ... p_{n-1}
, portanto,w=Omega(n)
esses números primos são os fatores primos den
. Wlog, consideraremos o últimow
. Para que possamos dividir os dois ladosn
e obterp_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}
ou
p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)
Dado que todos os números primos
p_0
parap_{n-w-1}
são maiores do que 1, aumentando qualquer um deles aumenta as LHS mais do que o RHS. Portanto, para um dado dadon
, podemos enumerar todas as soluções candidatas.Em particular, não pode haver soluções se o LHS for maior que o RHS, configurando todos os primos "livres" para 2. Ou seja, não há soluções se
2^{n-w} > 2 (n-w) + sopfr(n)
Como
sopfr(n) <= n
(com igualdade apenas para n = 4 ou n primo), podemos fazer uma afirmação mais fraca de que não há pontos de fixação se2^{n-w} > 3 n - 2 w
Mantendo-se
w
fixo, podemos selecionar diferentes valores den
satisfaçãow=Omega(n)
. O menorn
é esse2^w
. Observe que se2^{n-w}
for pelo menos 3 (ou sejan-w>1
, se for verdade sen>2
), o aumenton
enquanto mantémw
constante aumentará o LHS mais que o RHS. Observe também que, paraw>2
o menor possível,n
a desigualdade é satisfeita e não há pontos de fixação.Isso nos deixa com três casos:
w = 0
en = 1
;w = 1
en
é primo; ouw = 2
en
é semi-prime.Case
w = 0
.n = 1
, assimN
como qualquer prime.Case
w = 1
. Sen = 2
, em seguida,N = 2p
e exigimosp = p + 2
, que não tem soluções. Sen = 3
então temospq = p + q + 3
e duas soluções,(p=2, q=5)
e(p=3, q=3)
. Sen = 5
, em seguida2^4 > 3 * 5 - 2 * 1
, por isso não há mais soluções comw = 1
.Case
w = 2
. Sen = 4
, em seguida,N = 4pq
e exigimospq = p + q + 4
. Isso tem solução inteirap=2, q=6
, mas não há soluções principais. Sen = 6
, em seguida2^4 > 3 * 6 - 2 * 2
, por isso não há mais soluções comw = 2
.Todos os casos estão esgotados; portanto, os únicos fixpoints não principais são 27 e 30.
fonte
n
antes de ser contada, existe um não primon
depois de 49 para o qual a sequência não termina em 28?n
com limiteshigley(n)
acima. (Isso permitiria simplificar consideravelmente o loop - apenas repita osf(n)
tempos e depois descarte as duplicatas).Ruby, 92 caracteres
Esta solução assume que higley (1) é realmente 2, não 1 (veja o comentário de balpha acima):
fonte
Oitava - 109 caracteres
fonte
MATL , 19 bytes
Experimente online!
fonte