Підсумовування модулів


27

Я називаю цю послідовність "послідовністю Ісуса", оскільки це сума моди . </pun>

Для цієї послідовності ви берете всі натуральні цілі m, менші за вхідні n , і приймаєте суму n модулів на кожен m . Іншими словами:

an=m=1n1nmodm

Наприклад, візьміть термін 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

Ваша мета тут - написати функцію, яка реалізує цю послідовність. Ви повинні взяти термін послідовності (це буде додатне ціле число від 1 до 2 31 ) як єдиний вхід і вивести значення цього терміна. Це OEIS A004125 .

Як завжди, застосовуються стандартні лазівки, і найкоротша відповідь у байтах виграє!

Відповіді:





6

Фанки , 25 байт

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

Просто наївна відповідь, здається, працює.

Спробуйте в Інтернеті!

Десмос , 25 байт.

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

Вставте в Десмос, а потім запустіть його, зателефонувавши f.

Якщо вставити його в Десмос, латекс виглядає приблизно так

Однак графік виглядає так

Хоча це виглядає випадково і всюди, це результат лише підтримки цілих чисел.

RProgN 2 , 9 байт

x=x³x\%S+

Пояснив

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.

Спробуйте в Інтернеті!

ReRegex , 71 байт

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

Спробуйте в Інтернеті!

АРБЛ , 19 байт

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

Спробуйте в Інтернеті!

Можливо , пізніше , 56 байт

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

Спробуйте в Інтернеті!


Чи завершиться подання цього виклику? Поки що я отримую нову кожні 40 хвилин: П
Нісса

@StephenLeppik О, у мене ще більше прийде, не хвилюйся.
Атако

@StephenLeppik Я б краще не став, тому що вони різної якості на різних мовах.
Атако

@StephenLeppik Я поєднав їх для вас, настирливо.
Атако

4
Будь ласка, не робіть цього. Окремі мови - навіть окремі підходи - повинні відповідати окремо.
Денніс





4

Python 2 , 44 байти

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

Спробуйте в Інтернеті!

EDIT: Змінений діапазон (0, n) до діапазону (n)


2
Привіт, ласкаво просимо на сайт! rangeнеявно бере перший аргумент 0, так що ви можете скоротити це на два байти, зробивши range(n)замість цього.
DJMcMayhem

Ух ти! Я навіть про це не думав. Спасибі
Max00355

1
Ласкаво просимо до PPCG! Ви можете використовувати розуміння списку замість map38 байт: Спробуйте його в Інтернеті!
Містер Xcoder

Ви маєте рацію, але це було використано у відповіді Ніла, тому я не був впевнений, чи найкраще це було б скопіювати. Якщо, звичайно, я чогось тут не пропускаю. Я хотів опублікувати альтернативу, навіть якщо це було трохи довше.
Max00355




3

Стандартний ML (MLton) , 53 51 байт

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

Спробуйте в Інтернеті!

Безголівки:

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

Попередня версія 53 байтів:

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

Спробуйте в Інтернеті!

Пояснення:

List.tabulateприймає ціле число xта функцію fта формує список [f 0, f 1, ..., f(x-1)]. З огляду на деяке число n, ми називаємо List.tabulateз n-1і функції , fn i=>n mod(i+1)щоб уникнути поділу на нуль. Отриманий список підсумовується з foldl op+0.






2

05AB1E , 6 байт

ÎGIN%+

Спробуйте в Інтернеті!

Моя перша програма 05AB1E;)

До речі, я отримав два 39, 1 для JS6 і 1 для пітона, але я запізнився

Пояснення:

Î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

Додайте ++ , 14 байт

L,RAdx$p@BcB%s

Спробуйте в Інтернеті!

Як це працює

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 (CMD), 63 байти

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

Попередня 64-байтна версія:

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

2

T-SQL, 80 79 байт

-1 байт завдяки @MickyT

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

Отримує вхід від цілого параметра з назвою @приблизно так:

DECLARE @ int = 14;

Використовує загальний вираз таблиці для створення чисел від 1доn . Потім використовує цей cte для підсумовування модулів.

Примітка: cte потрібно ;між попереднім оператором і cte. Більшість кодів, які я бачив, ставлять ;право перед декларацією, але в цьому випадку я можу зберегти байт, включивши його у вхідний оператор (оскільки технічно мій код сам по собі є єдиним твердженням).

Спробуйте (SEDE)


Менш "SQL-y" спосіб - це лише 76 байт. Цього разу вхідна змінна @iзамість @(зберігає один байт). Цей просто робить whileцикл.

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






Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.