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.

Nissa
fuente

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!

Un taco
fuente
¿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

Jalea , 3 bytes

%RS

Explicación

%RS
 R   Range(input)  [1...n]
%    Input (implicit) modulo [1...n]->[n%1,n%2...n%n]
  S  Sum of the above

Pruébalo en línea!

dylnan
fuente
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.
Sanchises
fuente
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)

Max00355
fuente
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

JavaScript (ES6), 26 bytes

f=(n,k=n)=>n&&k%n+f(n-1,k)

Manifestación

Arnauld
fuente
3

Python 3 , 37 bytes

lambda a:sum(a%k for k in range(1,a))

Pruébalo en línea!

Neil
fuente
4 respuestas en 10 minutos? Guau.
Nissa
1
Deben ser algunos programadores muy talentosos. ;)
Neil
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.

Laikoni
fuente
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
ETHproducciones
fuente
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
Shieru Asakoto
fuente
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]
caird coinheringaahing
fuente
2

4 , 67 bytes

4 no tiene ningún módulo incorporado.

3.79960101002029980200300023049903204040310499040989804102020195984

Pruébalo en línea!

Uriel
fuente
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%
Neil
fuente
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
Brian J
fuente
2

PHP , 61 bytes

-2 bytes para eliminar la etiqueta de cierre

<?php $z=fgets(STDIN);for($y=1;$y<$z;$y++){$x+=$z%$y;}echo$x;

Pruébalo en línea!

NK1406
fuente
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
ბიმო
fuente
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!

Dave
fuente
Oh, en realidad encontré un byte 5 diferente al tuyo, no leí el tuyo correctamente
Dave