Tổng kết mô đun


27

Tôi gọi chuỗi này là "chuỗi Jesus", bởi vì nó là tổng của mod . </ Pun>

Đối với chuỗi này, bạn lấy tất cả các số nguyên dương m ít hơn n đầu vào và lấy tổng n modulo mỗi m . Nói cách khác:

mộtn= =Σm= =1n-1nmodm

Ví dụ: lấy thuật ngữ 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

Mục tiêu của bạn ở đây là viết một hàm thực hiện chuỗi này. Bạn nên lấy thuật ngữ chuỗi (đây sẽ là số nguyên dương từ 1 đến 2 31 ) làm đầu vào duy nhất và xuất giá trị của thuật ngữ đó. Đây là OEIS A004125 .

Như mọi khi, các sơ hở tiêu chuẩn được áp dụng và câu trả lời ngắn nhất tính theo byte sẽ thắng!

Câu trả lời:





6

Funky , 25 byte

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

Chỉ cần câu trả lời Naïve, dường như làm việc.

Hãy thử trực tuyến!

Desmos , 25 byte.

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

Dán vào Desmos, sau đó chạy nó bằng cách gọi f.

Khi dán vào Desmos, mủ trông như thế này

Tuy nhiên, biểu đồ trông giống như

Mặc dù có vẻ ngẫu nhiên và ở khắp mọi nơi, đó là kết quả của việc chỉ hỗ trợ các số nguyên.

RProgN 2 , 9 byte

x=x³x\%S+

Giải thích

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.

Hãy thử trực tuyến!

ReRegex , 71 byte

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

Hãy thử trực tuyến!

CẠNH , 19 byte

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

Hãy thử trực tuyến!

Có lẽ , 56 byte

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

Hãy thử trực tuyến!


Các bài nộp cho thử thách này bao giờ kết thúc? Cho đến nay tôi đã nhận được một cái mới cứ sau 40 phút: P
Nissa

@StephenLeppik Oh Tôi vẫn còn nhiều hơn nữa, đừng lo lắng.
ATaco

@StephenLeppik Tôi không muốn, vì chúng có chất lượng khác nhau trên các ngôn ngữ khác nhau.
ATaco

@StephenLeppik Tôi đã kết hợp chúng cho bạn, thật đáng tiếc.
ATaco

4
Xin đừng làm điều này. Các ngôn ngữ riêng biệt - thậm chí là các cách tiếp cận riêng biệt - nên có các câu trả lời riêng biệt.
Dennis





4

Python 2 , 44 byte

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

Hãy thử trực tuyến!

EDIT: Thay đổi phạm vi (0, n) thành phạm vi (n)


2
Xin Chào và Chào Mừng đến với trang! rangemặc nhiên lấy một đối số đầu tiên 0, vì vậy bạn có thể rút ngắn điều này bằng hai byte bằng cách thực hiện range(n)thay thế.
DJMcMayhem

Tuyệt vời! Tôi thậm chí không nghĩ về điều đó. Cảm ơn
Max00355

1
Chào mừng đến với PPCG! Bạn có thể sử dụng mức độ hiểu danh sách thay vì map38 byte: Hãy thử trực tuyến!
Ông Xcoder

Bạn đúng, nhưng điều đó đã được sử dụng trong câu trả lời của Neil, vì vậy tôi không chắc nếu sao chép nó sẽ là điều tốt nhất. Trừ khi tôi đang thiếu một cái gì đó ở đây tất nhiên. Tôi muốn đăng bài thay thế, ngay cả khi nó dài hơn một chút.
Max00355




3

ML chuẩn (MLton) , 53 51 byte

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

Hãy thử trực tuyến!

Ung dung:

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

Phiên bản 53 byte trước:

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

Hãy thử trực tuyến!

Giải trình:

List.tabulatelấy một số nguyên xvà một hàm fvà tạo danh sách [f 0, f 1, ..., f(x-1)]. Cho một số số n, chúng ta gọi List.tabulatevới n-1và hàm fn i=>n mod(i+1)để tránh chia cho số không. Danh sách kết quả được tóm tắt với foldl op+0.





3

Japt , 6 5 byte

Đã lưu 1 byte nhờ @Shaggy

Æ%XÃx

Kiểm tra nó trực tuyến!

Làm thế nào nó hoạt động

         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 byte

ÎGIN%+

Hãy thử trực tuyến!

Chương trình 05AB1E đầu tiên của tôi;)

Btw Tôi có hai 39, 1 cho JS6 và 1 cho python, nhưng tôi đã quá muộn

Giải trình:

Î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

Thêm ++ , 14 byte

L,RAdx$p@BcB%s

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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%

Phiên bản 64 byte trước:

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

2

T-SQL, 80 79 byte

-1 byte nhờ @MickyT

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

Nhận đầu vào từ một tham số nguyên có tên @, đại loại như thế này:

DECLARE @ int = 14;

Sử dụng một biểu thức Common Table để tạo ra các số từ 1đếnn . Sau đó sử dụng cte đó để tổng hợp các mô-đun.

Lưu ý: một cte cần một ;giữa câu lệnh trước và cte. Hầu hết các mã tôi đã thấy đặt ;quyền trước khi khai báo, nhưng trong trường hợp này tôi có thể lưu một byte bằng cách đưa nó vào câu lệnh đầu vào (vì về mặt kỹ thuật, mã của tôi tự nó là câu lệnh duy nhất).

Hãy thử nó (SEDE)


Cách "SQL-y" ít hơn chỉ là 76 byte. Lần này biến đầu vào là @ithay vì @(lưu một byte). Điều này chỉ làm một whilevòng lặp.

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




1

Husk , 5 byte

ΣṠM%ḣ

Hãy thử trực tuyến!

Giải trình

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

Bình thường , 5 byte

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

Hãy thử trực tuyến!


Ồ thực sự tôi đã tìm thấy 5 byter khác với bạn, đã không đọc chính xác của bạn
Dave
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.