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!

Nissa
quelle

Antworten:

8

Haskell , 22 Bytes

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

Probieren Sie es online!

Erläuterung

Ja.

ბიმო
quelle
5
Tolle Erklärung
Esolanging Fruit
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!

Ein Taco
quelle
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.
Sanchises
quelle
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

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

JavaScript (ES6), 26 Byte

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

Demo

Arnauld
quelle
3

Kohle , 9 Bytes

IΣEN﹪Iθ⊕ι

Probieren Sie es online!

Der Link führt zur ausführlichen Version des Codes:

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

Laikoni
quelle
3

Java (OpenJDK 8) , 45 Byte

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

Probieren Sie es online!

Olivier Grégoire
quelle
1
+1 Für die Verwendung des gehe zu ( -->) Operators.
Raznagul
3

APL (Dyalog) , 5 Bytes

+/⍳|⊢

Probieren Sie es online!

Wie?

Monadischer Zug -

+/ - Summe

- n

| - vektorisiertes Modulo

- die Reichweite von n

Uriel
quelle
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
ETHproductions
quelle
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
Shieru Asakoto
quelle
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]
Caird Coinheringaahing
quelle
2

4 , 67 Bytes

4 hat kein Modulo eingebaut.

3.79960101002029980200300023049903204040310499040989804102020195984

Probieren Sie es online!

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

PHP , 61 Bytes

-2 Bytes zum Entfernen des schließenden Tags

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

Probieren Sie es online!

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

Dave
quelle
Oh, eigentlich habe ich ein anderes 5-Byte-Format als Sie gefunden und nicht richtig gelesen
Dave,