Um divisor apropriado é um divisor de um número n , que não é n em si. Por exemplo, os divisores adequados de 12 são 1, 2, 3, 4 e 6.
Você receberá um número inteiro x , x ≥ 2, x ≤ 1000 . Sua tarefa é somar todos os divisores apropriados mais altos de números inteiros de 2 a x (inclusive) (OEIS A280050 ).
Exemplo (com x = 6
):
Encontre todos os números inteiros entre 2 e 6 (inclusive): 2,3,4,5,6.
Obtenha os divisores adequados de todos eles e escolha os mais altos de cada número:
- 2 -> 1
- 3 -> 1
- 4 -> 1, 2
- 5 -> 1
- 6 -> 1, 2, 3 .
Resumir os mais altos divisores apropriados:
1 + 1 + 2 + 1 + 3 = 8
.O resultado final é 8.
Casos de teste
Entrada | Saída ------- + --------- | 2 1 4 4 6 8 8 13 15 41. 37 229 100 1690 1000 165279
Regras
Aplicam-se lacunas padrão .
Você pode receber e fornecer saída por qualquer método padrão .
Este é o código-golfe , o menor envio válido em cada idioma vence! Diverta-se!
Respostas:
Oásis , 4 bytes
Código:
Experimente online!
Explicação:
Versão extendida:
fonte
Casca , 7 bytes
Experimente online!
Explicação
Husk não tem built-in para calcular os divisores diretamente (ainda), então estou usando a fatoração primária. O maior divisor próprio de um número é o produto de seus fatores primos, exceto o menor. Eu mapeio essa função no intervalo de 2 à entrada e soma os resultados.
fonte
Python 2 , 50 bytes
Isso é lento e nem consegue lidar com a entrada 15 no TIO.
Experimente online!
No entanto, a memorização ( obrigado @ musicman523 ) pode ser usada para verificar todos os casos de teste.
Experimente online!
Versão alternativa, 52 bytes
Ao custo de 2 bytes, podemos escolher entre calcular
f(n,k+1)
oun/k+f(n-1)
.Com alguns truques, isso funciona para todos os casos de teste, mesmo no TIO.
Experimente online!
fonte
f
é uma função pura , você pode memoize-lo para executar os casos maiores em TIOGelatina , 6 bytes
Experimente online!
Como funciona
fonte
Braquilog , 10 bytes
Experimente online!
fonte
JavaScript (ES6), 40 bytes
Um número é igual ao produto do seu maior divisor próprio e do menor fator primo.
fonte
n>352
(pelo menos neste trecho, não sei se é a dependência do meu navegador / máquina) enquanto você deveria suportar pelo menos atén=1000
.n=1000
se você usar, por exemplonode --stack_size=8000
.05AB1E ,
98 bytes-1 Byte, graças ao truque principal de Leaky Nun em sua resposta Pyth
Experimente online!
Explicação
Solução alternativa de 8 bytes (que não funciona no TIO)
e ofc solução alternativa de 9 bytes (que funciona no TIO)
fonte
Retina ,
3124 bytes7 bytes graças a Martin Ender.
Experimente online!
Como funciona
O regex
/^(1+)\1+$/
captura o maior divisor próprio de um determinado número representado em unário. No código, o\1+
é transformado em uma sintaxe lookahead.fonte
Mathematica, 30 bytes
fonte
Pitão ,
1398 bytes1 byte graças ao jacoblaw.
Conjunto de teste .
Como funciona
O maior divisor apropriado é o produto dos fatores primos, exceto o menor.
fonte
Python 2 (PyPy) ,
737170 bytesNão é a resposta mais curta do Python, mas isso apenas passa pelos casos de teste. O TIO lida com entradas de até 30.000.000 sem suar a camisa; meu computador de mesa lida com 300.000.000 em um minuto.
Com o custo de 2 bytes , a condição
n>d
pode ser usada para uma aceleração de ~ 10%.Agradecemos a @xnor pela
r=[0]*n
ideia, que salvou 3 bytes!Experimente online!
fonte
l=[0]*n
deve permitir que você se livre-2
.exec
meio que mata a velocidade, mas mesmo umwhile
loop seria mais curto do que minha abordagem.Haskell,
484643 bytesExperimente online!
Edit: @rogaos salvou dois bytes. Obrigado!
Edite II: ... e @xnor mais 3 bytes.
fonte
f 2=1 f n=last[d|d<-[1..n-1],mod n d<1]+f(n-1)
sum
, então pensei que não era mais curta.until
economiza um pouco mais:until((<1).mod n)pred(n-1)+f(n-1)
Japt ,
8 + 2 = 1086 bytesTeste-o
Explicação
fonte
-x
conta como dois bytes de acordo com este post . No entanto, eu acho que você pode salvar um byte comò2_â1 o
(â
exclui o número original quando dado um argumento)â
argumento me deu a economia que eu estava procurando.õ Å
antes e encontrei um par 8 e 9 byters:õ Åx_/k g
,õ Åx_k Å×
,õ Åx_â¬o
. E, combinandoõ
eÅ
com seuxo
truque genial, eu encontrei uma solução de 7 bytes :-)MATL, 12 bytes
Experimente no MATL Online
Explicação
fonte
PHP , 56 bytes
Experimente online!
fonte
Prolog (SWI) , 72 bytes
Experimente online!
fonte
Cubix , 27
39bytesExperimente online!
Cubificado
Assista
0IU
Configure a pilha com um acumulador e o número inteiro inicial. Inversão de marcha em U para o circuito externo:(?
duplicar a parte superior atual da pilha, diminuir e testar\pO@
se o loop for zero ao redor do cubo em um espelho, pegue o fundo da pilha, produza e pare%\!
se positivo, mod, relete e teste.u;.W
se for verdade, faça inversão de marcha, remova o resultado do mod e a faixa volte ao loop internoU;p+qu;;\(
se falsey, inversão de marcha, remova o resultado da modificação, coloque o acumulador no topo, adicione o divisor inteiro atual (superior) ao empurrão para baixo e inversão de marcha. Limpe a pilha para ter apenas o acumulador e o número inteiro atual, diminua o número inteiro e insira o loop externo novamente.fonte
C # (.NET Core) ,
7472 bytesExperimente online!
fonte
break
paraj=0
.Na verdade , 12 bytes
Experimente online!
fonte
Python 3 ,
78 75 7371 bytesNem mesmo perto da resposta em python da freira Leaky na contagem de bytes.
Experimente online!
fonte
Python 3 ,
696359 bytes4 bytes graças a Dennis.
Experimente online!
Defino o limite de recursão para 2000 para que isso funcione para 1000.
fonte
Carvão , 37 bytes
Experimente online!
O link é para a versão detalhada. Levei quase todo o dia para descobrir como resolver uma questão não relacionada à arte ASCII em Charcoal, mas finalmente entendi e tenho muito orgulho de mim. :-D
Sim, tenho certeza que isso pode ser muito praticado. Acabei de traduzir minha resposta em C # e tenho certeza de que as coisas podem ser feitas de maneira diferente no carvão vegetal. Pelo menos resolve o
1000
caso em alguns segundos ...fonte
Pari / GP ,
3630 bytesExperimente online!
fonte
Python 2 (PyPy) , 145 bytes
Como transformar competições de código-golfe em competições de código mais rápido é divertido, aqui está um algoritmo O ( n ) que, no TIO, resolve n = 5.000.000.000 em 30 segundos. ( A peneira de Dennis é O ( n log n ).)
Experimente online!
Como funciona
Contamos o tamanho do conjunto
S = {( a , b ) | 2 ≤ a ≤ n , 2 ≤ b ≤ maior divisor próprio ( a )},
reescrevendo-a como a união, sobre todos os primos p ≤ √n, de
S p = {( p ⋅ d , b ) | 2 ≤ d ≤ n / p , 2 ≤ b ≤ d },
e usando o princípio de inclusão-exclusão :
| S | = ∑ (−1) m - 1 | S p 1 ∩ ⋯ S p m | acima de m ≥ 1 e inicia p 1 <⋯ < p m ≤ √n,
Onde
S p 1 ∩ p S p m = {( p 1 ⋯ p m ⋅ e , b ) | 1 ≤ e ≤ n / ( p 1 ⋯ p m ), 2 ≤ b ≤ p 1 ⋯ p m - 1 e },
| S p 1 ∩ ⋯ S p m | = ⌊ n / ( p 1 ⋯ p m ) ⌋⋅ ( p 1 ⋯p m - 1 ⋅ (⌊ n / ( p 1 ⋯ p m ) ⌋ + 1) - 2) / 2.
A soma tem C ⋅ n termos diferentes de zero, onde C converge para alguma constante que é provavelmente 6 ⋅ (1 - ln 2) / π 2 ≈ 0,186544. O resultado final é então | S | + n - 1.
fonte
NewStack , 5 bytes
Felizmente, na verdade há um embutido.
O colapso:
Em inglês real:
Vamos executar um exemplo para uma entrada 8.
Nᵢ
: Faça uma lista de números naturais de 1 a 8:1, 2, 3, 4, 5, 6, 7, 8
;
: Calcule os maiores fatores:1, 1, 1, 2, 1, 3, 1, 4
q
. Remova o primeiro elemento:1, 1, 2, 1, 3, 1, 4
Σ
E pegue a soma:1+1+2+1+3+1+4
=13
fonte
1+1+2+1+3+1+4
=13
não8
. Além disso: ótima resposta, então +1.Java 8,
787472 bytesPorto da resposta C # de @CarlosAlejo .
Experimente aqui.
Resposta antiga (78 bytes):
Experimente aqui.
Explicação (da resposta antiga):
fonte
Lua , 74 bytes
Experimente online!
fonte
J , 18 bytes
Experimente online!
fonte
Empilhados , 31 bytes
Experimente online!(Todos os casos de teste, exceto 1000, que excedem o limite de tempo on-line de 60 segundos.)
Explicação
fonte
C (gcc) , 53 bytes
Experimente online!
Confortavelmente, passa rapidamente em todos os casos de teste.
fonte