Soma do módulo


27

Eu chamo essa sequência de "a sequência de Jesus", porque é a soma do mod . </pun>

Para esta sequência, você pega todos os números inteiros positivos m menores que a entrada n e a soma do n módulo cada m . Em outras palavras:

an=∑m=1n−1nmodm

Por exemplo, considere o termo 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

Seu objetivo aqui é escrever uma função que implemente essa sequência. Você deve tomar o termo de sequência (este será um número inteiro positivo de 1 a 2 31 ) como a única entrada e gerar o valor desse termo. Este é o OEIS A004125 .

Como sempre, brechas comuns se aplicam e a resposta mais curta em bytes vence!

Respostas:





6

Funky , 25 bytes

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

Apenas a resposta ingênua, parece funcionar.

Experimente online!

Desmos , 25 bytes.

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

Cole no Desmos e execute-o chamando f.

Quando colado no Desmos, o látex fica assim

No entanto, o gráfico parece

Embora pareça aleatório e em todo o lugar, esse é o resultado de apenas suportar números inteiros.

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.

Experimente online!

ReRegex , 71 bytes

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

Experimente online!

ARBLE , 19 bytes

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

Experimente online!

Talvez mais tarde , 56 bytes

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

Experimente online!


As submissões para esse desafio terminarão? Até agora, recebo um novo a cada 40 minutos: P
— Nissa

@StephenLeppik Oh, ainda tenho mais novidades, não se preocupe.
— ATaco

@StephenLeppik Prefiro não, porque eles são de várias qualidades em vários idiomas.
— ATaco

@StephenLeppik Eu os combinei para você, relutantemente.
— ATaco

4
Por favor, não faça isso. Idiomas separados - mesmo abordagens separadas - devem ser respondidos separadamente.
— Dennis


5

MATL , 4 bytes

t:\s

Experimente online!

Explicação:

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)))

Experimente online!

EDIT: Faixa alterada (0, n) para faixa (n)


2
Olá e bem-vindo ao site! rangeimplica implicitamente um primeiro argumento de 0, para que você possa encurtar isso em dois bytes fazendo isso range(n).
— DJMcMayhem

Oh uau! Eu nem pensei nisso. Graças
— Max00355

1
Bem-vindo ao PPCG! Você pode usar uma compreensão de lista em vez de map38 bytes: Experimente online!
— Mr. Xcoder

Você está certo, mas isso foi usado na resposta de Neil, então eu não tinha certeza se a cópia seria a melhor coisa. A menos que esteja faltando alguma coisa aqui, é claro. Eu queria postar a alternativa, mesmo que fosse um pouco mais longa.
— Max00355




3

ML padrão (MLton) , 53 51 bytes

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

Experimente online!

Ungolfed:

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

Versão anterior de 53 bytes:

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

Experimente online!

Explicação:

List.tabulatepega um número inteiro xe uma função fe gera a lista [f 0, f 1, ..., f(x-1)]. Dado algum número n, chamamos List.tabulatewith n-1e a função fn i=>n mod(i+1)para evitar dividir por zero. A lista resultante é resumida em foldl op+0.





3

Japonês , 6 5 bytes

Guardado 1 byte graças a @Shaggy

Æ%XÃx

Teste online!

Como 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%+

Experimente online!

Meu primeiro programa 05AB1E;)

Btw eu tenho dois 39s, 1 para JS6 e 1 para python, mas eu estava muito atrasado

Explicação:

Î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

Adicionar ++ , 14 bytes

L,RAdx$p@BcB%s

Experimente online!

Como 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 do Windows (CMD), 63 bytes

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

Versão 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 graças a @MickyT

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

Recebe entrada de um parâmetro inteiro chamado @, algo como isto:

DECLARE @ int = 14;

Usa uma expressão de tabela comum para gerar números de 1para n. Em seguida, usa esse cte para resumir os módulos.

Nota: um cte precisa de um ;entre a instrução anterior e o cte. A maioria dos códigos que eu vi coloca o ;direito antes da declaração, mas nesse caso eu posso salvar um byte colocando-o na instrução de entrada (já que tecnicamente meu código é a única instrução).

Experimente (SEDE)


A maneira menos "SQL-y" é de apenas 76 bytes. Desta vez, a variável de entrada está em @ivez de @(salva um byte). Este apenas faz um whileloop.

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




1

Casca , 5 bytes

ΣṠM%ḣ

Experimente online!

Explicação

ΣṠ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

Pitão , 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

Experimente online!


Oh, na verdade, eu encontrei a 5 Byter diferente do que você, não leu o seu corretamente
— Dave
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.