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!

Nissa
fonte

Respostas:

8

Haskell , 22 bytes

f x=sum$mod x<$>[1..x]

Experimente online!

Explicação

Sim.

ბიმო
fonte
5
Grande explicação
Esolanging Fruit
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!

ATaco
fonte
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

Gelatina , 3 bytes

%RS

Explicação

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

Experimente online!

dylnan
fonte
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.
Sanchises
fonte
4

R, 20 bytes

sum((n=scan())%%1:n)

Experimente online!

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

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

JavaScript (ES6), 26 bytes

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

Demo

Arnauld
fonte
3

Python 3 , 37 bytes

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

Experimente online!

Neil
fonte
4 respostas em 10 minutos? Uau.
NISSO14:
1
Devem ser alguns programadores muito talentosos. ;)
Neil
3

Carvão , 9 bytes

IΣEN﹪Iθ⊕ι

Experimente online!

O link é para a versão detalhada do código:

Print(Cast(Sum(Map(InputNumber(),Modulo(Cast(q),++(i))))));
Charlie
fonte
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.

Laikoni
fonte
3

Java (OpenJDK 8) , 45 bytes

n->{int m=n,s=0;for(;m-->1;)s+=n%m;return s;}

Experimente online!

Olivier Grégoire
fonte
1
+1 Para usar o -->operador vai para ( ).
raznagul
3

APL (Dyalog) , 5 bytes

+/⍳|⊢

Experimente online!

Quão?

Trem monádico -

+/ - soma

- n

| - módulo vetorizado

- o alcance de n

Uriel
fonte
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
ETHproductions
fonte
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
Shieru Asakoto
fonte
2

Julia 0.4, 15 bytes

x->sum(x%[1:x])

Experimente online!

Lescurel
fonte
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]
caird coinheringaahing
fonte
2

4 , 67 bytes

4 não possui nenhum módulo embutido.

3.79960101002029980200300023049903204040310499040989804102020195984

Experimente online!

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

PHP , 61 bytes

-2 bytes para remover a marca de fechamento

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

Experimente online!

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

Dave
fonte
Oh, na verdade, eu encontrei a 5 Byter diferente do que você, não leu o seu corretamente
Dave