Modul Summation


27

Ich nenne diese Sequenz "die Jesus-Sequenz", weil es sich um die Summe von Mod . </ Pun> handelt

Für diese Sequenz nehmen Sie alle positiven ganzen Zahlen m kleiner als die Eingabe n und nehmen die Summe von n Modulo pro m . Mit anderen Worten:

an=m=1n1nmodm

Nehmen Sie zum Beispiel den Ausdruck 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

Ihr Ziel hier ist es, eine Funktion zu schreiben, die diese Sequenz implementiert. Sie sollten den Sequenzterm nehmen (dies ist eine positive ganze Zahl von 1 bis 2) 231 ) als einzige Eingabe verwenden und den Wert dieses Terms ausgeben. Dies ist OEIS A004125 .

Wie immer, gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!

Antworten:





6

Funky , 25 Bytes

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

Nur die naive Antwort scheint zu funktionieren.

Probieren Sie es online!

Desmos , 25 Bytes.

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

In Desmos einfügen und dann durch Aufrufen ausführen f.

Nach dem Einfügen in Desmos sieht der Latex so aus

Die Grafik sieht jedoch so aus

Obwohl es zufällig und überall aussieht, ist dies das Ergebnis nur unterstützender Ganzzahlen.

RProgN 2 , 9 Bytes

x=x³x\%S+

Erklärt

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.

Probieren Sie es online!

ReRegex , 71 Bytes

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

Probieren Sie es online!

ARBLE , 19 Bytes

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

Probieren Sie es online!

Vielleicht später , 56 Bytes

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

Probieren Sie es online!


Werden die Einsendungen zu dieser Herausforderung jemals enden? Bisher habe ich alle 40 Minuten einen neuen bekommen: P
Nissa

@StephenLeppik Oh, ich habe noch mehr vor mir, keine Sorge.
ATaco

@StephenLeppik würde ich lieber nicht, weil sie von unterschiedlicher Qualität in verschiedenen Sprachen sind.
ATaco

@StephenLeppik Ich habe sie widerwillig für dich kombiniert.
ATaco

4
Bitte tu das nicht. Getrennte Sprachen - auch getrennte Ansätze - sollten getrennte Antworten enthalten.
Dennis


5

MATL , 4 Bytes

t:\s

Probieren Sie es online!

Erläuterung:

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

Probieren Sie es online!

EDIT: Bereich (0, n) auf Bereich (n) geändert


2
Hallo und willkommen auf der Seite! rangeNimmt implizit ein erstes Argument von an 0, so könnten Sie dies range(n)stattdessen um zwei Bytes verkürzen, indem Sie tun .
DJMcMayhem

Oh wow! Daran habe ich gar nicht gedacht. Danke
Max00355

1
Willkommen bei PPCG! Sie können ein Listenverständnis anstelle von map38 Bytes verwenden: Probieren Sie es online aus!
Mr. Xcoder

Sie haben Recht, aber das wurde in Neils Antwort verwendet, daher war ich mir nicht sicher, ob das Kopieren das Beste gewesen wäre. Es sei denn, ich vermisse hier natürlich etwas. Ich wollte die Alternative posten, auch wenn sie etwas länger war.
Max00355




3

Standard ML (MLton) , 53 51 Bytes

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

Probieren Sie es 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

Vorherige 53-Byte-Version:

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

Probieren Sie es online!

Erläuterung:

List.tabulateNimmt eine Ganzzahl xund eine Funktion fund generiert die Liste [f 0, f 1, ..., f(x-1)]. Bei einer bestimmten Zahl nrufen wir List.tabulatemit n-1und die Funktion fn i=>n mod(i+1)auf, um eine Division durch Null zu vermeiden. Die resultierende Liste wird mit summiert foldl op+0.





3

Japt , 6 5 Bytes

1 Byte dank @Shaggy gespeichert

Æ%XÃx

Online testen!

Wie es funktioniert

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

Probieren Sie es online!

Mein erstes 05AB1E Programm;)

Übrigens bekam ich zwei 39er, einen für JS6 und einen für Python, aber ich war zu spät

Erläuterung:

Î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

Addiere ++ , 14 Bytes

L,RAdx$p@BcB%s

Probieren Sie es online!

Wie es funktioniert

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

Windows Batch (CMD), 63 Byte

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

Vorherige 64-Byte-Version:

@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 dank @MickyT

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

Erhält eine Eingabe von einem Integer-Parameter mit dem Namen @:

DECLARE @ int = 14;

Verwendet einen allgemeinen Tabellenausdruck, um Zahlen von 1bis zu generieren n. Dann wird dieser Wert verwendet, um die Module zusammenzufassen.

Hinweis: Ein CTE benötigt ein ;zwischen der vorherigen Anweisung und dem CTE. Der meiste Code, den ich gesehen habe, setzt das; Recht vor der Deklaration, aber in diesem Fall kann ich ein Byte speichern, indem ich es in der Eingabeanweisung habe (da technisch gesehen mein Code allein die einzige Anweisung ist).

Probieren Sie es aus (SEDE)


Die weniger "SQL-y" -Methode ist nur 76 Bytes. Diesmal ist die Eingabevariable @istatt @(spart ein Byte). Dieser macht nur eine whileSchleife.

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




1

Schale , 5 Bytes

ΣṠM%ḣ

Probieren Sie es online!

Erläuterung

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

Probieren Sie es online!


Oh, eigentlich habe ich ein anderes 5-Byte-Format als Sie gefunden und nicht richtig gelesen
Dave,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.