การรวมโมดูลัส


27

ฉันเรียกลำดับนี้ว่า "ลำดับพระเยซู" เพราะเป็นผลรวมของ mod </pun>

สำหรับลำดับนี้คุณใช้เวลาทั้งหมดจำนวนเต็มบวกmน้อยกว่าการป้อนข้อมูลที่nและใช้ผลรวมของn modulo แต่ละเมตร ในคำอื่น ๆ :

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++

เพียงคำตอบไร้เดียงสาดูเหมือนว่าจะทำงาน

ลองออนไลน์!

Desmos , 25 ไบต์

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

วางลงใน Desmos fแล้วใช้มันโดยการเรียก

เมื่อวางลงใน Desmos น้ำยางจะมีลักษณะเช่นนี้

อย่างไรก็ตามกราฟดูเหมือนว่า

แม้ว่ามันจะดูแบบสุ่มและทั่วสถานที่นั่นเป็นผลมาจากการสนับสนุนจำนวนเต็มเท่านั้น

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

ลองออนไลน์!

ARBLE , 19 ไบต์

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

ลองออนไลน์!

อาจจะต่อมา 56 ไบต์

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

ลองออนไลน์!


การส่งความท้าทายนี้จะสิ้นสุดลงหรือไม่ จนถึงตอนนี้ฉันได้รับใหม่ทุก ๆ 40 นาที: P
Nissa

@StephenLeppik โอ้ฉันยังมีอีกมาไม่ต้องกังวล
ATaco

@StephenLeppik ฉันไม่อยากเพราะพวกเขามีคุณภาพที่แตกต่างกันในหลายภาษา
ATaco

@StephenLeppik ฉันได้รวมพวกคุณเข้าด้วยกันแล้ว
ATaco

4
โปรดอย่าทำเช่นนี้ ภาษาที่แยกกัน - แม้กระทั่งแนวทางที่แยกต่างหาก - ควรจะตอบแยก
เดนนิส





4

Python 2 , 44 ไบต์

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

ลองออนไลน์!

แก้ไข: เปลี่ยนช่วง (0, n) เป็นช่วง (n)


2
สวัสดีและยินดีต้อนรับสู่เว็บไซต์! rangeโดยปริยายใช้อาร์กิวเมนต์แรกของ0ดังนั้นคุณสามารถทำให้สั้นลงสองไบต์โดยทำrange(n)แทน
DJMcMayhem

โอ้ว้าว! ฉันไม่ได้คิดอย่างนั้น ขอบคุณ
Max00355

1
ยินดีต้อนรับสู่ PPCG! คุณสามารถใช้ list comprehension แทนmap38 ไบต์: ลองออนไลน์!
Mr. Xcoder

คุณพูดถูก แต่ถูกใช้ในคำตอบของนีลดังนั้นฉันไม่แน่ใจว่าการคัดลอกจะเป็นสิ่งที่ดีที่สุดหรือไม่ แน่นอนถ้าฉันไม่มีอะไรที่นี่แน่นอน ฉันต้องการโพสต์ทางเลือกแม้ว่ามันจะค่อนข้างนาน
Max00355




3

มาตรฐาน ML (MLton) , 53 51 ไบต์

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

ลองออนไลน์!

Ungolfed:

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 แรกของฉัน;)

Btw ฉันได้รับ 39s สองต่อ 1 สำหรับ JS6 และ 1 สำหรับ python แต่ฉันก็สายเกินไป

คำอธิบาย:

Î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 Batch (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;

ใช้ Common Table Expression เพื่อสร้างตัวเลขตั้งแต่1ถึงnไปจากนั้นใช้ cte นั้นเพื่อรวมโมดูลัส

หมายเหตุ: cte ต้องการ;ระหว่างคำสั่งก่อนหน้าและ cte รหัสส่วนใหญ่ที่ฉันเห็นทำให้;ถูกต้องก่อนการประกาศ แต่ในกรณีนี้ฉันสามารถบันทึก byte โดยมีมันในงบป้อนข้อมูล (เนื่องจากในทางเทคนิครหัสของฉันด้วยตัวเองเป็นคำสั่งเท่านั้น)

ลองใช้ (SEDE)


วิธี "SQL-y" ที่น้อยกว่าคือ 76 ไบต์เท่านั้น เวลานี้ตัวแปรอินพุต@iแทน@(บันทึกหนึ่งไบต์) อันนี้แค่whileวนซ้ำ

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






1

Pyth , 5 ไบต์

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

ลองออนไลน์!


โอ้จริงฉันพบ 5 byter ที่แตกต่างจากคุณไม่ได้อ่านอย่างถูกต้อง
เดฟ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.