Reto
Dado un número entero positivo, devuelve el producto de sus divisores, incluido él mismo.
Esta es la secuencia A007955 en el OEIS .
Casos de prueba
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
Tanteo
Este es el código de golf , por lo que gana la respuesta más corta en cada idioma.
Respuestas:
05AB1E , 2 bytes
Pruébalo en línea!
Explicación
fuente
Japt , 3 bytes
Pruébalo en línea!
Explicación
fuente
â
y×
cuando escribo esta respuestaJalea , 3 bytes
Pruébalo en línea!
fuente
MATL , 3 bytes
Pruébalo en línea!
fuente
Python 3 ,
4241 bytes¡Salvado 1 byte gracias a Leaky Nun!
Pruébalo en línea!
fuente
(1,k)[i%k<1]
es equivalente ak**(i%k<1)
Haskell ,
3534 bytes-1 gracias a ovs
Pruébalo en línea!
fuente
Pyth , 6 bytes
Banco de pruebas .
fuente
Alice , 12 bytes
Pruébalo en línea!
Explicación
Este es solo el marco regular para E / S decimal:
Entonces el programa es:
fuente
Neim , 2 bytes
Pruébalo en línea!
fuente
R , 28 bytes
Pruébalo en línea!
fuente
Código de máquina x86-64, 26 bytes
El código anterior define una función que toma un solo parámetro (el valor de entrada, un entero positivo) en
EDI
(siguiendo la convención de llamada AMD64 del Sistema V utilizado en Gnu / Unix), y devuelve un único resultado (el producto de los divisores) enEAX
.Internamente, calcula el producto de los divisores utilizando un algoritmo iterativo (extremadamente ineficiente), similar al envío C de pizzapants184 . Básicamente, utiliza un contador para recorrer todos los valores entre 1 y el valor de entrada, verificando si el valor del contador actual es un divisor de la entrada. Si es así, multiplica eso en el producto total acumulado.
Mnemónicos de lenguaje ensamblador sin golf:
El hecho de que la
IDIV
instrucción utilice operandos codificados para el dividendo obstaculiza un poco mi estilo, pero creo que esto es bastante bueno para un lenguaje que no tiene incorporados sino aritmética básica y ramas condicionales.fuente
TI-Basic (TI-84 Plus CE), 24 bytes
Programa completo: solicita información al usuario; devuelve la salida en
Ans
, una variable especial que (básicamente) almacena el valor del último valor calculado.Explicación:
fuente
C (gcc),
5248 bytes-4 bytes gracias a Cody Gray
Una función que toma un número entero y devuelve el producto de sus divisores.
Pruébalo en línea!
Sin golf:
fuente
p*=
expresión y (3) colocando una declaración en el cuerpo delfor
bucle para colocar una coma. También me gusta usar variables globales, en lugar de agregar parámetros adicionales. Esto evita un comportamiento indefinido, sin costar bytes. Versión final:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
return p;
conp=p;
y guardar cinco bytes.p,a;f(x)
conf(x,p,a)
.return p;
y guardar no cinco, sino nueve bytes. ( TIO )JavaScript (ES7), 32 bytes
Ahorró un par de bytes tomando prestada la sugerencia de Leaky sobre la solución Python de musicman .
Intentalo
Alternativa (ES6), 32 bytes
fuente
(n%i?1:i)
? (Sin embargo, esto no ahorraría ningún byte).TI-Basic,
241413 bytesGuardado 1 byte gracias a lirtosiast
fuente
int(
?QBIC , 22 bytes
Explicación
fuente
Pari / GP , 18 bytes
Pruébalo en línea!
fuente
PHP , 45 bytes
Pruébalo en línea!
fuente
Mathematica, 17 bytes
Para aquellos que no pueden ver las respuestas eliminadas (la respuesta de DavidC), este es el código en Mathematica con la ayuda de @MartinEnder
fuente
Lenguaje de programación Shakespeare , 353 bytes
Versión sin golf:
Estoy usando este compilador SPL para ejecutar el programa.
Corre con:
fuente
Python 3, 45 bytes
lambda _:_**(sum(_%-~i<1for i in range(_))/2)
Deja
x
ser un número. Ambosy
yz
serán divisores dex
ify * z = x
. Por lo tanto,y = x / z
. Digamos que un númerod
tiene 6 divisiors, debido a esta observación los divisores serána
,b
,c
,d / a
,d / b
,d / b
. Si multiplicamos todos estos números (el punto del rompecabezas), obtenemosd * d * d = d ^ 3
. En general, parae
un número def
divisores, el producto de dichos divisores seráe ^ (f / 2)
, que es lo que hace la lambda.Pruébalo en línea!
fuente
MY , 4 bytes
Maleficio:
Explicación:
fuente
Java (OpenJDK 8) ,
5251 bytesPruébalo en línea!
¡Gracias LeakyNun por guardar 1 byte!
fuente
n->{int r=n,d=0;for(;++d<n;)r*=n%d<1?d:1;return r;}
RProgN 2 , 2 bytes
Otro lenguaje con complementos integrados para
divisors
yproduct
.Pruébalo en línea!
fuente
Perl 6 , 22 bytes
Pruébalo en línea!
fuente
J, 19 bytes
Explicación que viene más tarde ...
Pruébalo en línea!
fuente
Octava , 27 bytes
Esto define una función anónima.
Pruébalo en línea!
fuente
Python 2 ,
5250 bytesm*=n%i>0 or i
Pruébalo en línea!
fuente
Fortran 95, 88 bytes
Pruébalo en línea!
Sin golf:
fuente
Axioma, 23 bytes
Esta es una traducción en Axioma de la solución alephalpha
fuente