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!

Nissa
sumber

Jawaban:

8

Haskell , 22 byte

f x=sum$mod x<$>[1..x]

Cobalah online!

Penjelasan

Iya nih.

ბიმო
sumber
5
Penjelasan hebat
Buah Esolanging
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!

ATaco
sumber
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

Jelly , 3 byte

%RS

Penjelasan

%RS
 R   Range(input)  [1...n]
%    Input (implicit) modulo [1...n]->[n%1,n%2...n%n]
  S  Sum of the above

Cobalah online!

dylnan
sumber
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.
Sanchises
sumber
4

R, 20 byte

sum((n=scan())%%1:n)

Cobalah online!

plannapus
sumber
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)

Max00355
sumber
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

JavaScript (ES6), 26 byte

f=(n,k=n)=>n&&k%n+f(n-1,k)

Demo

Arnauld
sumber
3

Python 3 , 37 byte

lambda a:sum(a%k for k in range(1,a))

Cobalah online!

Neil
sumber
4 jawaban dalam 10 menit? Wow.
Nissa
1
Pasti ada programmer yang sangat berbakat. ;)
Neil
3

Arang , 9 byte

IΣEN﹪Iθ⊕ι

Cobalah online!

Tautan ke versi kode yang verbose:

Print(Cast(Sum(Map(InputNumber(),Modulo(Cast(q),++(i))))));
Charlie
sumber
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.

Laikoni
sumber
3

Java (OpenJDK 8) , 45 byte

n->{int m=n,s=0;for(;m-->1;)s+=n%m;return s;}

Cobalah online!

Olivier Grégoire
sumber
1
+1 Untuk menggunakan -->operator go to ( ).
raznagul
3

APL (Dyalog) , 5 byte

+/⍳|⊢

Cobalah online!

Bagaimana?

Kereta monadik -

+/ - jumlah

- n

| - modulo vektor

- kisaran n

Uriel
sumber
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
Produksi ETH
sumber
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
Shieru Asakoto
sumber
2

Julia 0,4, 15 byte

x->sum(x%[1:x])

Cobalah online!

Lescurel
sumber
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]
caird coinheringaahing
sumber
2

4 , 67 byte

4 tidak memiliki modulo bawaan .

3.79960101002029980200300023049903204040310499040989804102020195984

Cobalah online!

Uriel
sumber
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%
Neil
sumber
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
Brian J
sumber
2

PHP , 61 byte

-2 byte untuk menghapus tag penutup

<?php $z=fgets(STDIN);for($y=1;$y<$z;$y++){$x+=$z%$y;}echo$x;

Cobalah online!

NK1406
sumber
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
ბიმო
sumber
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!

Dave
sumber
Oh sebenarnya saya menemukan 5 byter yang berbeda dari Anda, tidak membaca dengan benar
Dave