Un desafío simple pero con suerte no del todo trivial:
Escriba un programa o función que sume los kpoderes th que dividen un número n. Más específicamente:
- Entrada: dos enteros positivos
nyk(o un par ordenado de enteros, etc.) - Salida: la suma de todos los divisores positivos de
neso son laskpotencias de los enteros
Por ejemplo, 11! = 39916800 tiene seis divisores que son cubos, a saber, 1, 8, 27, 64, 216, y 1728. Por lo tanto entradas dadas 39916800y 3, el programa debe devolver su suma, 2044.
Otros casos de prueba:
{40320, 1} -> 159120
{40320, 2} -> 850
{40320, 3} -> 73
{40320, 4} -> 17
{40320, 5} -> 33
{40320, 6} -> 65
{40320, 7} -> 129
{40320, 8} -> 1
{46656, 1} -> 138811
{46656, 2} -> 69700
{46656, 3} -> 55261
{46656, 4} -> 1394
{46656, 5} -> 8052
{46656, 6} -> 47450
{46656, 7} -> 1
{1, [any positive integer]} -> 1
Este es el código de golf, así que cuanto más corto sea el código, mejor. Doy la bienvenida al código de golf en todo tipo de idiomas diferentes, incluso si algún otro idioma puede escapar con menos bytes que el tuyo.
code-golf
arithmetic
number-theory
integer
Greg Martin
fuente
fuente

Respuestas:
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
Entrada de ejemplo
46656, 3fuente
Mathematica, 28 bytes
Toma de funciones sin nombre
nykcomo entradas en ese orden.fuente
DivisorSumestá frustrantemente cerca de ser útil aquí.Haskell ,
37 3534 bytesPruébalo en línea! Uso:
El código es bastante ineficiente porque siempre computa
1^k, 2^k, ..., n^k.Editar: guardado un byte gracias a Zgarb.
Explicación:
fuente
mod n(x^k)puede sern`mod`x^k.Python 2,
5452 bytesGracias @Rod por cortar 2 bytes.
fuente
x%i**n==0conx%i**n<1, y moverse al otro lado comoi**n*(x%i**n<1)Ruby, 45 bytes
Sería más corto usando "sum" en Ruby 2.4. ¿Hora de actualizar?
fuente
MATL , 10 bytes
Pruébalo en línea!
Cómo funciona
Ejemplo con
46656,6.fuente
Jalea ,
76 bytes-1 byte gracias a Dennis (atraviesa un rango implícito)
Una eficiencia inteligente que también ahorra Dennis a un costo de 0 bytes
(Anteriormente
ÆDf*€Sfiltraría mantener esos divisores que son una potencia de k de cualquier número natural hasta n . Pero tenga en cuenta que n puede ¡solo tengo un divisor de i k si tiene un divisor de i de todos modos!)Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES7),
5653 bytesToma
nyken sintaxis curry(n)(k).Casos de prueba
Mostrar fragmento de código
fuente
Perl 6 , 39 bytes
Cómo funciona
Intentalo
fuente
Japt , 10 bytes
Ahorró muchos bytes gracias a @ETHproductions
Explicación
¡Pruébelo en línea!
fuente
vUDetecta números divisibles porUo números que se dividenU?fvUfiltra a los elementos que son divisibles porU;f!vUfiltra a los elementos queUes divisible por.!intercambia los argumentos.Scala 63 bytes
fuente
Python 2 , 50 bytes
Pruébalo en línea! Las entradas grandes pueden exceder la profundidad de recursión dependiendo de su sistema e implementación.
fuente
JavaScript (ES7),
4946 bytesfuente
n=>k=>? +1.icomo local, lo que cuesta 4 bytes adicionales, y olvidé que podía abusaride la misma manera que lo hice con mi otra formulación.)PHP, 86 bytes
Pruébalo aquí!
Descompostura :
fuente
for(;$x<$n=$argv[1];)$n%($x=++$i**$argv[2])?:$s+=$x;echo$s;59 bytes; requiere PHP 5.6 o posterior.CJam , 20 bytes
Probablemente no sea un golf óptimo, pero no veo ningún cambio obvio que hacer ...
Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
(El crédito no es mío )
fuente
Utilidades Bash + Unix, 44 bytes
Pruébalo en línea!
Pruebas de funcionamiento:
fuente
Python , 56 bytes
Pruébalo en línea!
Bastante sencillo. Lo único notable es que
j**k**-1%1siempre devuelve un flotante en [0,1) mientras quen%jsiempre devuelve un entero no negativo, por lo que solo pueden ser iguales si ambos son 0 .fuente
Lote, 138 bytes
Como Batch no tiene un operador de energía, estoy abusando
set/acomo una forma deeval. Muy lento cuandok=1. La aritmética de enteros de 32 bits limita los valores admitidos denyk:fuente
R, 28 bytes directos, 43 bytes para la función
si n, k en la memoria:
para una función:
fuente