Desafio
Dado um número inteiro positivo, retorne o produto de seus divisores, incluindo ele próprio.
Esta é a sequência A007955 no OEIS .
Casos de teste
1: 1 2: 2 3: 3 4: 8 5: 5 6: 36 7: 7 8: 64 9: 27 10: 100 12: 1728 14: 196 24: 331776 25: 125 28: 21952 30: 810000
Pontuação
Isso é código-golfe , então a resposta mais curta em cada idioma vence!
Respostas:
05AB1E , 2 bytes
Experimente online!
Explicação
fonte
Japonês , 3 bytes
Experimente online!
Explicação
fonte
â
e×
ao escrever esta respostaGelatina , 3 bytes
Experimente online!
fonte
MATL , 3 bytes
Experimente online!
fonte
Python 3 ,
4241 bytesGuardado 1 byte graças a Leaky Nun!
Experimente online!
fonte
(1,k)[i%k<1]
é equivalente ak**(i%k<1)
Haskell ,
3534 bytes-1 graças a ovs
Experimente online!
fonte
Pitão , 6 bytes
Conjunto de teste .
fonte
Alice , 12 bytes
Experimente online!
Explicação
Esta é apenas a estrutura regular para E / S decimal:
Então o programa é:
fonte
Neim , 2 bytes
Experimente online!
fonte
R , 28 bytes
Experimente online!
fonte
Código da máquina x86-64, 26 bytes
O código acima define uma função que recebe um único parâmetro (o valor de entrada, um número inteiro positivo) em
EDI
(seguindo a convenção de chamada do System V AMD64 usada no Gnu / Unix) e retorna um único resultado (o produto dos divisores) emEAX
.Internamente, ele calcula o produto de divisores usando um algoritmo iterativo (extremamente ineficiente), semelhante à submissão C de pizzapants184 . Basicamente, ele usa um contador para percorrer todos os valores entre 1 e o valor de entrada, verificando se o valor atual do contador é um divisor da entrada. Nesse caso, ele multiplica isso no produto total em execução.
Mnemônicos de linguagem assembly não destruídos:
O fato de a
IDIV
instrução usar operandos codificados para os dividendos diminui um pouco meu estilo, mas acho que isso é muito bom para uma linguagem que não tem built-ins, mas aritmética básica e ramificações condicionais!fonte
TI-Basic (TI-84 Plus CE), 24 bytes
Programa completo: solicita entrada do usuário; retorna a saída in
Ans
, uma variável especial que (basicamente) armazena o valor do último valor calculado.Explicação:
fonte
C (gcc),
5248 bytes-4 bytes graças a Cody Gray
Uma função que recebe um número inteiro e retorna o produto de seus divisores.
Experimente online!
Ungolfed:
fonte
p*=
expressão e (3) colocando uma instrução no corpo dofor
loop para soltar uma vírgula. Também gosto de usar vars globais, em vez de adicionar parâmetros extras. Isso evita um comportamento indefinido, sem custar bytes. Versão final:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
return p;
comp=p;
e salvar cinco bytes.p,a;f(x)
porf(x,p,a)
.return p;
e salvar não cinco, mas nove bytes. ( TIO )JavaScript (ES7), 32 bytes
Economizou alguns bytes emprestando a dica de Leaky na solução Python do musicman .
Tente
Alternativa (ES6), 32 bytes
fonte
(n%i?1:i)
? (Isto não iria salvar qualquer byte, no entanto.)TI-Basic,
241413 bytesGuardado 1 byte graças a lirtosiast
fonte
int(
?QBIC , 22 bytes
Explicação
fonte
Pari / GP , 18 bytes
Experimente online!
fonte
PHP , 45 bytes
Experimente online!
fonte
Mathematica, 17 bytes
para quem não consegue ver as respostas excluídas (resposta de DavidC), este é o código no Mathematica com a ajuda de @MartinEnder
fonte
Linguagem de programação de Shakespeare , 353 bytes
Versão não destruída:
Estou usando este compilador SPL para executar o programa.
Correr com:
fonte
Python 3, 45 bytes
lambda _:_**(sum(_%-~i<1for i in range(_))/2)
Let
x
Ser um número. Ambosy
ez
serão divisores dex
ify * z = x
. Portantoy = x / z
,. Digamos que um númerod
tem 6 divisiors, devido a esta observação os divisores seráa
,b
,c
,d / a
,d / b
,d / b
. Se multiplicarmos todos esses números (o ponto do quebra-cabeça), obtemosd * d * d = d ^ 3
. Em geral, parae
um número def
divisores, o produto desses divisores seráe ^ (f / 2)
, que é o que a lambda faz.Experimente online!
fonte
MEU , 4 bytes
Hex:
Explicação:
fonte
Java (OpenJDK 8) ,
5251 bytesExperimente online!
Obrigado LeakyNun por economizar 1 byte!
fonte
n->{int r=n,d=0;for(;++d<n;)r*=n%d<1?d:1;return r;}
RProgN 2 , 2 bytes
Outra linguagem com ins internos para
divisors
eproduct
.Experimente online!
fonte
Perl 6 , 22 bytes
Experimente online!
fonte
J, 19 bytes
Explicação em breve ...
Experimente online!
fonte
Oitava , 27 bytes
Isso define uma função anônima.
Experimente online!
fonte
Python 2 ,
5250 bytesm*=n%i>0 or i
Experimente online!
fonte
Fortran 95, 88 bytes
Experimente online!
Ungolfed:
fonte
Axioma, 23 bytes
Esta é uma tradução em axioma da solução de alefalfa
fonte