Sommazione del modulo


27

Chiamo questa sequenza "la sequenza di Gesù", perché è la somma del mod . </pun>

Per questa sequenza, prendi tutti gli interi positivi m in meno dell'ingresso n e prendi la somma di n modulo ogni m . In altre parole:

an=m=1n1nmodm

Ad esempio, prendi il termine 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

Il tuo obiettivo qui è quello di scrivere una funzione che implementa questa sequenza. Dovresti prendere il termine della sequenza (questo sarà un numero intero positivo compreso tra 1 e 2 31 ) come unico input e produrre il valore di quel termine. Questo è OEIS A004125 .

Come sempre, si applicano scappatoie standard e vince la risposta più breve in byte!

Risposte:





6

Funky , 25 byte

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

Solo la risposta ingenua sembra funzionare.

Provalo online!

Desmos , 25 byte.

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

Incolla su Desmos, quindi eseguilo chiamando f.

Quando viene incollato in Desmos, il lattice si presenta così

Il grafico tuttavia sembra

Anche se sembra casuale e ovunque, questo è il risultato del solo supporto di numeri interi.

RProgN 2 , 9 byte

x=x³x\%S+

spiegato

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.

Provalo online!

ReRegex , 71 byte

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

Provalo online!

ARBLE , 19 byte

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

Provalo online!

Forse più tardi , 56 byte

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

Provalo online!


Le domande per questa sfida finiranno mai? Finora ne ho ricevuto uno nuovo ogni 40 minuti: P
Nissa il

@StephenLeppik Oh, ne ho ancora altri in arrivo, non ti preoccupare.
ATaco,

@StephenLeppik Preferirei di no, perché sono di varia qualità in varie lingue.
ATaco,

@StephenLeppik Li ho combinati per te, a malincuore.
ATaco,

4
Per favore, non farlo. Lingue separate - anche approcci separati - dovrebbero andare in risposte separate.
Dennis,


5

MATL , 4 byte

t:\s

Provalo online!

Spiegazione:

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 byte

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

Provalo online!

EDIT: intervallo modificato (0, n) in intervallo (n)


2
Ciao e benvenuto nel sito! rangeaccetta implicitamente un primo argomento di 0, quindi puoi accorciarlo di due byte facendo range(n)invece.
DJMcMayhem

Oh wow! Non ci avevo nemmeno pensato. Grazie
Max00355,

1
Benvenuti in PPCG! È possibile utilizzare una comprensione dell'elenco anziché mapper 38 byte: provalo online!
Mr. Xcoder,

Hai ragione, ma quello è stato usato nella risposta di Neil, quindi non ero sicuro che copiarlo sarebbe stata la cosa migliore. A meno che non mi manchi qualcosa qui, ovviamente. Volevo pubblicare l'alternativa, anche se era un po 'più lunga.
Max00355,



3

Carbone , 9 byte

IΣEN﹪Iθ⊕ι

Provalo online!

Il collegamento è alla versione dettagliata del codice:

Print(Cast(Sum(Map(InputNumber(),Modulo(Cast(q),++(i))))));

3

ML standard (MLton) , 53 51 byte

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

Provalo 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

Versione 53 byte precedente:

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

Provalo online!

Spiegazione:

List.tabulateaccetta un numero intero xe una funzione fe genera l'elenco [f 0, f 1, ..., f(x-1)]. Dato un numero n, chiamiamo List.tabulatecon n-1e la funzione fn i=>n mod(i+1)per evitare di dividere per zero. L'elenco risultante viene sommato con foldl op+0.





3

Japt , 6 5 byte

Salvato 1 byte grazie a @Shaggy

Æ%XÃx

Provalo online!

Come funziona

         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 byte

ÎGIN%+

Provalo online!

Il mio primo programma 05AB1E;)

A proposito, ho ricevuto due 39, 1 per JS6 e 1 per Python, ma ero troppo tardi

Spiegazione:

Î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

Aggiungi ++ , 14 byte

L,RAdx$p@BcB%s

Provalo online!

Come funziona

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

4 , 67 byte

4 non ha alcun modulo integrato.

3.79960101002029980200300023049903204040310499040989804102020195984

Provalo online!


2

Windows Batch (CMD), 63 byte

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

Versione precedente a 64 byte:

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

2

T-SQL, 80 79 byte

-1 byte grazie a @MickyT

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

Riceve input da un parametro intero denominato @, qualcosa del genere:

DECLARE @ int = 14;

Utilizza un'espressione di tabella comune per generare numeri da 1a n. Quindi utilizza quel cte per riassumere i moduli.

Nota: un cte richiede una ;tra l'istruzione precedente e il cte. La maggior parte del codice che ho visto mette ;proprio prima della dichiarazione, ma in questo caso posso salvare un byte inserendolo nell'istruzione input (poiché tecnicamente il mio codice da solo è l'unica istruzione).

Provalo (SEDE)


Il modo meno "SQL-y" è solo 76 byte. Questa volta la variabile di input è @iinvece di @(salva un byte). Questo fa solo un whileciclo.

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

2

PHP , 61 byte

-2 byte per la rimozione del tag di chiusura

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

Provalo online!




1

Buccia , 5 byte

ΣṠM%ḣ

Provalo online!

Spiegazione

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

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

Provalo online!


Oh, in realtà ho trovato 5 byte diversi da te, non ho letto correttamente il tuo
Dave,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.