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=1n1nmodm

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.