Penjumlahan Modulus


27

Saya menyebut urutan ini "urutan Yesus", karena ini adalah jumlah mod . </pun>

Untuk urutan ini, Anda mengambil semua bilangan bulat positif m kurang dari input n , dan mengambil jumlah n modulo setiap m . Dengan kata lain:

Sebuahn=m=1n-1nmodm

Misalnya, ambil istilah 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

Tujuan Anda di sini adalah untuk menulis fungsi yang mengimplementasikan urutan ini. Anda harus menggunakan istilah urutan (ini akan menjadi bilangan bulat positif dari 1 hingga 2 31 ) sebagai satu-satunya input, dan menampilkan nilai istilah tersebut. Ini adalah OEIS A004125 .

Seperti biasa, celah standar berlaku dan jawaban terpendek dalam byte menang!

Jawaban:





6

Funky , 25 byte

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

Hanya jawaban Naif, sepertinya berhasil.

Cobalah online!

Desmos , 25 byte.

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

Tempel ke Desmos, lalu jalankan dengan menelepon f.

Ketika disisipkan ke Desmos, lateksnya terlihat seperti ini

Grafiknya terlihat seperti

Meskipun terlihat acak dan di semua tempat, itu adalah hasil dari hanya bilangan bulat pendukung.

RProgN 2 , 9 byte

x=x³x\%S+

Dijelaskan

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.

Cobalah online!

ReRegex , 71 byte

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

Cobalah online!

ARBLE , 19 byte

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

Cobalah online!

MungkinKemudian , 56 byte

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

Cobalah online!


Apakah pengajuan untuk tantangan ini akan berakhir? Sejauh ini saya sudah mendapatkan yang baru setiap 40 menit: P
Nissa

@StephenLeppik Oh, saya masih banyak yang datang, jangan khawatir.
ATaco

@StephenLeppik Saya lebih suka tidak, karena mereka memiliki berbagai kualitas di berbagai bahasa.
ATaco

@StephenLeppik Saya sudah menggabungkannya untuk Anda, dengan enggan.
ATaco

4
Tolong jangan lakukan ini. Bahasa yang terpisah - bahkan pendekatan yang terpisah - harus masuk dalam jawaban yang terpisah.
Dennis


5

MATL , 4 byte

t:\s

Cobalah online!

Penjelasan:

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 byte

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

Cobalah online!

EDIT: Rentang yang diubah (0, n) hingga rentang (n)


2
Halo, dan selamat datang di situs ini! rangesecara implisit mengambil argumen pertama 0, jadi Anda bisa mempersingkat ini dengan dua byte dengan melakukan range(n)sebaliknya
DJMcMayhem

Oh wow! Aku bahkan tidak memikirkan itu. Terima kasih
Max00355

1
Selamat datang di PPCG! Anda dapat menggunakan pemahaman daftar alih-alih mapuntuk 38 byte: Cobalah secara online!
Tuan Xcoder

Anda benar, tetapi itu digunakan dalam jawaban Neil, jadi saya tidak yakin apakah menyalin itu akan menjadi yang terbaik. Kecuali saya kehilangan sesuatu di sini tentu saja. Saya ingin memposting alternatif, meskipun itu sedikit lebih lama.
Max00355




3

ML Standar (MLton) , 53 51 byte

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

Cobalah online!

Tidak Disatukan:

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

Versi 53 byte sebelumnya:

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

Cobalah online!

Penjelasan:

List.tabulatemengambil bilangan bulat xdan fungsi fdan menghasilkan daftar [f 0, f 1, ..., f(x-1)]. Diberi nomor tertentu n, kami memanggil List.tabulatedengan n-1dan fungsi fn i=>n mod(i+1)untuk menghindari pembagian dengan nol. Daftar yang dihasilkan dijumlahkan dengan foldl op+0.





3

Japt , 6 5 byte

Disimpan 1 byte berkat @Shaggy

Æ%XÃx

Uji secara online!

Bagaimana itu bekerja

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

Cobalah online!

Program 05AB1E pertama saya;)

Btw saya mendapat dua 39-an, 1 untuk JS6 dan 1 untuk python, tapi saya sudah terlambat

Penjelasan:

Î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

Tambahkan ++ , 14 byte

L,RAdx$p@BcB%s

Cobalah online!

Bagaimana itu bekerja

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

4 , 67 byte

4 tidak memiliki modulo bawaan .

3.79960101002029980200300023049903204040310499040989804102020195984

Cobalah online!


2

Windows Batch (CMD), 63 byte

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

Versi 64-byte sebelumnya:

@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 terima kasih kepada @MickyT

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

Menerima input dari parameter integer bernama @, sesuatu seperti ini:

DECLARE @ int = 14;

Menggunakan Ekspresi Tabel Umum untuk menghasilkan angka dari 1hingga n. Kemudian gunakan cte itu untuk meringkas modulus.

Catatan: a cte membutuhkan ;antara pernyataan sebelumnya dan cte. Kebanyakan kode yang saya lihat menempatkan; hak sebelum deklarasi, tetapi dalam kasus ini saya dapat menyimpan byte dengan memasukkannya dalam pernyataan input (karena secara teknis kode saya dengan sendirinya adalah satu-satunya pernyataan).

Cobalah (SEDE)


Cara "SQL-y" yang kurang adalah hanya 76 byte. Kali ini variabel input @ibukan @(menyimpan satu byte). Yang ini hanya melakukan satu whileputaran.

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




1

Sekam , 5 byte

ΣṠM%ḣ

Cobalah online!

Penjelasan

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

Cobalah online!


Oh sebenarnya saya menemukan 5 byter yang berbeda dari Anda, tidak membaca dengan benar
Dave
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.