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!

Réponses:





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!


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.



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)


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

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.





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

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



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]


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%

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




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


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!


Oh en fait, j'ai trouvé un 5 octets différent de vous, je n'ai pas lu le vôtre correctement
Dave
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.