Suma de módulos


27

Llamo a esta secuencia "la secuencia de Jesús", porque es la suma del mod . </pun>

Para esta secuencia, toma todos los enteros positivos m menos que la entrada n , y toma la suma de n módulo cada m . En otras palabras:

an=m=1n1nmodm

Por ejemplo, tome el término 14 :

14 % 1 = 0
14 % 2 = 0
14 % 3 = 2
14 % 4 = 2
14 % 5 = 4
14 % 6 = 2
14 % 7 = 0
14 % 8 = 6
14 % 9 = 5
14 % 10 = 4
14 % 11 = 3
14 % 12 = 2
14 % 13 = 1
0+0+2+2+4+2+0+6+5+4+3+2+1=31

Su objetivo aquí es escribir una función que implemente esta secuencia. Debería tomar el término de secuencia (este será un entero positivo de 1 a 2 31 ) como la única entrada y generar el valor de ese término. Este es OEIS A004125 .

Como siempre, se aplican las lagunas estándar y gana la respuesta más corta en bytes.

Respuestas:





6

Funky , 25 bytes

n=>fors=~-i=1i<n)s+=n%i++

Solo la respuesta ingenua parece funcionar.

Pruébalo en línea!

Desmos , 25 bytes.

f(x)=\sum_{n=1}^xmod(x,n)

Pega en Desmos, luego ejecútalo llamando f.

Cuando se pega en Desmos, el látex se ve así

Sin embargo, el gráfico parece

Aunque parece aleatorio y en todas partes, ese es el resultado de solo apoyar enteros.

RProgN 2 , 9 bytes

x=x³x\%S+

Explicado

x=x³x\%S+
x=          # Store the input in "x"
  x         # Push the input to the stack.
   ³x\%     # Define a function which gets n%x
       S    # Create a stack from "x" with the previous function. Thus this gets the range from (1,x), and runs (i%x) on each element.
        +   # Get the sum of this stack.

Pruébalo en línea!

ReRegex , 71 bytes

#import math
(_*)_a$/d<$1_>b$1a/(\d+)b/((?#input)%$1)+/\+a//u<#input
>a

Pruébalo en línea!

ARBLE , 19 bytes

sum(range(1,a)|a%i)

Pruébalo en línea!

Quizás más tarde , 56 bytes

whenf is*{n=0whenx is*{ifx>0{n=n+f%x x--}elseprintn}x=f}

Pruébalo en línea!


¿Terminarán las presentaciones a este desafío? Hasta ahora he estado recibiendo uno nuevo cada 40 minutos: P
Nissa

@StephenLeppik Oh, todavía tengo más por venir, no te preocupes.
ATaco

@StephenLeppik Prefiero no hacerlo, porque son de diversa calidad en varios idiomas.
ATaco

@StephenLeppik Los he combinado para ti, de mala gana.
ATaco

44
Por favor no hagas esto. Los idiomas separados, incluso los enfoques separados, deben ir en respuestas separadas.
Dennis


5

MATL , 4 bytes

t:\s

Pruébalo en línea!

Explicación:

t      % Duplicate input. Stack: {n, n}
 :     % Range 1...n. Stack: {n, [1...n]}
  \    % Modulo. Stack: {[0,0,2,2,4,...]}
   s   % Sum. Implicitly display result.



4

Python 2 , 44 bytes

lambda n:sum(map(lambda x:x%(n-x),range(n)))

Pruébalo en línea!

EDITAR: Rango cambiado (0, n) a rango (n)


2
Hola y bienvenidos al sitio! rangetoma implícitamente un primer argumento de 0, por lo que podría acortar esto en dos bytes haciendo en su range(n)lugar.
DJMcMayhem

¡Oh wow! Ni siquiera pensé en eso. Gracias
Max00355

1
Bienvenido a PPCG! Puede usar una lista de comprensión en lugar de map38 bytes: ¡ Pruébelo en línea!
Sr. Xcoder

Tienes razón, pero eso se usó en la respuesta de Neil, así que no estaba seguro de si copiarlo hubiera sido lo mejor. A menos que me falte algo aquí, por supuesto. Quería publicar la alternativa, aunque fuera un poco más larga.
Max00355




3

ML estándar (MLton) , 53 51 bytes

fn& =>let fun f 1a=a|f%a=f(% -1)(a+ &mod%)in f&0end

Pruébalo en línea!

Sin golf:

fn n =>
   let fun f 1 a = a
         | f x a = f (x-1) (a + n mod x)
   in  
       f n 0
   end

Versión anterior de 53 bytes:

fn n=>foldl op+0(List.tabulate(n-1,fn i=>n mod(i+1)))

Pruébalo en línea!

Explicación:

List.tabulatetoma un entero xy una función fy genera la lista [f 0, f 1, ..., f(x-1)]. Dado algún número n, llamamos List.tabulatecon n-1y la función fn i=>n mod(i+1)para evitar dividir por cero. La lista resultante se resume con foldl op+0.





3

Japt , 6 5 bytes

Guardado 1 byte gracias a @Shaggy

Æ%XÃx

¡Pruébalo en línea!

Cómo funciona

         Implicit: U = input number
Æ        Create the range [0, U),
 %XÃ       mapping each item X to U%X. U%0 gives NaN.
    x    Sum, ignoring non-numbers.
         Implicit: output result of last expression

2

05AB1E , 6 bytes

ÎGIN%+

Pruébalo en línea!

Mi primer programa 05AB1E;)

Por cierto, obtuve dos 39, 1 para JS6 y 1 para Python, pero llegué demasiado tarde

Explicación:

ÎGIN%+
Î                      # Push 0, then input, stack = [(accumulator = 0), I]
 G                     # For N in range(1, I), stack = [(accumulator)]
  IN                   # Push input, then N, stack = [(accumulator), I, N]
    %                  # Calculate I % N, stack = [(accumulator), I % N]
     +                 # Add the result of modulus to accumulator



2

Añadir ++ , 14 bytes

L,RAdx$p@BcB%s

Pruébalo en línea!

Cómo funciona

L,   - Create a lambda function.
     - Example argument:     [7]
  R  - Range;        STACK = [[1 2 3 4 5 6 7]]
  A  - Argument;     STACK = [[1 2 3 4 5 6 7] 7]
  d  - Duplicate;    STACK = [[1 2 3 4 5 6 7] 7 7]
  x  - Repeat;       STACK = [[1 2 3 4 5 6 7] 7 [7 7 7 7 7 7 7]]
  $p - Swap and pop; STACK = [[1 2 3 4 5 6 7] [7 7 7 7 7 7 7]]
  @  - Reverse;      STACK = [[7 7 7 7 7 7 7] [1 2 3 4 5 6 7]]
  Bc - Zip;          STACK = [[7 1] [7 2] [7 3] [7 4] [7 5] [7 6] [7 7]]
  B% - Modulo each;  STACK = [0, 1, 1, 3, 2, 1, 0]
  s  - Sum;          STACK = [8]


2

Lote de Windows (CMD), 63 bytes

@set s=0
@for /l %%i in (1,1,%1)do @set/as+=%1%%%%i
@echo %s%

Versión anterior de 64 bytes:

@set/ai=%2+1,s=%3+%1%%i
@if %i% neq %1 %0 %1 %i% %s%
@echo %s%

2

T-SQL, 80 79 bytes

-1 byte gracias a @MickyT

WITH c AS(SELECT @ i UNION ALL SELECT i-1FROM c WHERE i>1)SELECT SUM(@%i)FROM c

Recibe información de un parámetro entero llamado @, algo como esto:

DECLARE @ int = 14;

Utiliza una expresión de tabla común para generar números de 1a n. Luego usa ese cte para resumir los módulos.

Nota: un cte necesita un ;entre la declaración anterior y el cte. La mayoría del código que he visto pone el ;derecho antes de la declaración, pero en este caso puedo guardar un byte al tenerlo en la declaración de entrada (ya que técnicamente mi código en sí mismo es la única declaración).

Pruébalo (SEDE)


La forma menos "SQL-y" es de solo 76 bytes. Esta vez, la variable de entrada es en @ilugar de @(guarda un byte). Este solo hace un whilebucle.

DECLARE @ int=2,@o int=0WHILE @<@i BEGIN SELECT @o+=@i%@,@+=1 END PRINT @o




1

Casco , 5 bytes

ΣṠM%ḣ

Pruébalo en línea!

Explicación

ΣṠM%ḣ  -- implicit input x, example: 5
 ṠM%   -- map (mod x) over the following..
    ḣ  -- ..the range [1..x]: [5%1,5%2,5%3,5%4,5%5] == [0,1,2,1,0]
Σ      -- sum: 0+1+2+1+0 == 4


1

Pyth , 5 bytes

s%LQS

s%LQS - Full program, inputs N from stdin and prints sum to stdout
s     - output the sum of
 %LQ  - the function (elem % N) mapped over 
    S - the inclusive range from 1..N

Pruébalo en línea!


Oh, en realidad encontré un byte 5 diferente al tuyo, no leí el tuyo correctamente
Dave
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.