Somme de module

27

J'appelle cette séquence "la séquence de Jésus", car c'est la somme du mod . </pun>

Pour cette séquence, vous prenez tous les entiers positifs m inférieurs à l'entrée n , et prenez la somme de n modulo chaque m . En d'autres termes:

an=m=1n1nmodm

Par exemple, prenez le terme 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

Votre objectif ici est d'écrire une fonction qui implémente cette séquence. Vous devez prendre le terme de séquence (ce sera un entier positif de 1 à 2 31 ) comme seule entrée et sortir la valeur de ce terme. Il s'agit d' OEIS A004125 .

Comme toujours, les failles standard s'appliquent et la réponse la plus courte en octets gagne!

Nissa
la source

Réponses:

8

Haskell , 22 octets

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

Essayez-le en ligne!

Explication

Oui.

ბიმო
la source
5
Grande explication
Esolanging Fruit
6

Funky , 25 octets

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

La réponse naïve semble fonctionner.

Essayez-le en ligne!

Desmos , 25 octets.

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

Collez dans Desmos, puis exécutez-le en appelant f.

Une fois collé dans Desmos, le latex ressemble à ceci

Le graphique ressemble cependant à

Bien que cela semble aléatoire et partout, c'est le résultat de la prise en charge uniquement des entiers.

RProgN 2 , 9 octets

x=x³x\%S+

Expliqué

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.

Essayez-le en ligne!

ReRegex , 71 octets

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

Essayez-le en ligne!

ARBLE , 19 octets

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

Essayez-le en ligne!

Peut -être plus tard , 56 octets

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

Essayez-le en ligne!

ATaco
la source
Les soumissions à ce défi finiront-elles jamais? Jusqu'à présent, j'en ai un nouveau toutes les 40 minutes: P
Nissa
@StephenLeppik Oh, j'ai encore plus à venir, ne vous inquiétez pas.
ATaco
@StephenLeppik Je préfère ne pas, car ils sont de différentes qualités dans différentes langues.
ATaco
@StephenLeppik Je les ai combinés pour vous, à contrecœur.
ATaco
4
Veuillez ne pas faire ça. Des langues distinctes - même des approches distinctes - devraient faire l'objet de réponses distinctes.
Dennis
5

MATL , 4 octets

t:\s

Essayez-le en ligne!

Explication:

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
la source
4

Python 2 , 44 octets

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

Essayez-le en ligne!

EDIT: plage modifiée (0, n) en plage (n)

Max00355
la source
2
Bonjour et bienvenue sur le site! rangeprend implicitement un premier argument de 0, vous pouvez donc le raccourcir de deux octets en faisant à la range(n)place.
DJMcMayhem
Oh wow! Je n'y ai même pas pensé. Merci
Max00355
1
Bienvenue chez PPCG! Vous pouvez utiliser une liste de compréhension au lieu de map38 octets: Essayez-la en ligne!
M. Xcoder
Vous avez raison, mais cela a été utilisé dans la réponse de Neil, donc je ne savais pas si la copier aurait été la meilleure chose. Sauf si je manque quelque chose ici bien sûr. Je voulais publier l'alternative, même si c'était un peu plus long.
Max00355
3

JavaScript (ES6), 26 octets

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

Démo

Arnauld
la source
3

Python 3 , 37 octets

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

Essayez-le en ligne!

Neil
la source
4 réponses en 10 minutes? Sensationnel.
Nissa
1
Doit être des programmeurs très doués. ;)
Neil
3

Fusain , 9 octets

IΣEN﹪Iθ⊕ι

Essayez-le en ligne!

Le lien est vers la version détaillée du code:

Print(Cast(Sum(Map(InputNumber(),Modulo(Cast(q),++(i))))));
Charlie
la source
3

ML standard (MLton) , 53 51 octets

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

Essayez-le en ligne!

Non golfé:

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

Version précédente de 53 octets:

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

Essayez-le en ligne!

Explication:

List.tabulateprend un entier xet une fonction fet génère la liste [f 0, f 1, ..., f(x-1)]. Étant donné un certain nombre n, nous appelons List.tabulateavec n-1et la fonction fn i=>n mod(i+1)pour éviter de diviser par zéro. La liste résultante est additionnée de foldl op+0.

Laikoni
la source
3

Java (OpenJDK 8) , 45 octets

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

Essayez-le en ligne!

Olivier Grégoire
la source
1
+1 Pour utiliser l' -->opérateur va à ( ).
raznagul
3

APL (Dyalog) , 5 octets

+/⍳|⊢

Essayez-le en ligne!

Comment?

Train monadique -

+/ - somme

- n

| - modulo vectorisé

- la gamme de n

Uriel
la source
3

Japt , 6 5 octets

1 octet enregistré grâce à @Shaggy

Æ%XÃx

Testez-le en ligne!

Comment ça marche

         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
la source
2

05AB1E , 6 octets

ÎGIN%+

Essayez-le en ligne!

Mon premier programme 05AB1E;)

Btw j'ai eu deux 39s, 1 pour JS6 et 1 pour python, mais j'étais trop tard

Explication:

Î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
la source
2

Ajouter ++ , 14 octets

L,RAdx$p@BcB%s

Essayez-le en ligne!

Comment ça marche

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
la source
2

4 , 67 octets

4 n'a pas de module intégré.

3.79960101002029980200300023049903204040310499040989804102020195984

Essayez-le en ligne!

Uriel
la source
2

Windows Batch (CMD), 63 octets

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

Version précédente de 64 octets:

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

T-SQL, 80 79 octets

-1 octet grâce à @MickyT

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

Reçoit l'entrée d'un paramètre entier nommé @, quelque chose comme ceci:

DECLARE @ int = 14;

Utilise une expression de table commune pour générer des nombres de 1à n. Utilise ensuite ce cte pour résumer les modules.

Remarque: un cte a besoin d'un ;entre l'instruction précédente et le cte. La plupart du code que j'ai vu met le ;droit avant la déclaration, mais dans ce cas, je peux enregistrer un octet en le plaçant dans l'instruction d'entrée (car techniquement mon code en lui-même est la seule instruction).

Essayez-le (SEDE)


La méthode moins "SQL-y" n'est que de 76 octets. Cette fois, la variable d'entrée est @iau lieu de @(enregistre un octet). Celui-ci fait juste une whileboucle.

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

PHP , 61 octets

-2 octets pour supprimer la balise de fermeture

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

Essayez-le en ligne!

NK1406
la source
1

Husk , 5 octets

ΣṠM%ḣ

Essayez-le en ligne!

Explication

ΣṠ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
ბიმო
la source
1

Pyth , 5 octets

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

Essayez-le en ligne!

Dave
la source
Oh en fait, j'ai trouvé un 5 octets différent de vous, je n'ai pas lu le vôtre correctement
Dave