Modül Toplama


27

Ben bu diziye "İsa dizisi" diyorum, çünkü bu modun toplamıdır .

Bu sekans için, tüm pozitif tamsayılar almak m az girdi daha n ve toplamını almak n her modulo m . Diğer bir deyişle:

an=∑m=1n−1nmodm

Örneğin, 14 terimini alın :

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

Buradaki amacınız bu sırayı uygulayan bir fonksiyon yazmaktır. Sıra terimini (bu 1 - 2 31 arasında pozitif bir tamsayı olacak ) tek girdi olarak almalı ve bu terimin değerini vermelisiniz . Bu OEIS A004125 .

Her zaman olduğu gibi standart boşluklar uygulanır ve bayt cinsinden en kısa cevap kazanır!

Yanıtlar:





6

Funky , 25 bayt

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

Sadece Naif cevabı, iş gibi görünüyor.

Çevrimiçi deneyin!

Desmos , 25 bayt.

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

Desmos'a yapıştırın, sonra arayarak çalıştırın f.

Desmos'a yapıştırıldığında lateks buna benzer

Grafik ancak benziyor

Her yerde rastgele ve her yerde görünse de, bu yalnızca destekleyici tam sayıların sonucudur.

RProgN 2,9 bayt

x=x³x\%S+

Açıklaması

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.

Çevrimiçi deneyin!

ReRegex , 71 bayt

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

Çevrimiçi deneyin!

ARBLE , 19 bayt

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

Çevrimiçi deneyin!

Belki daha sonra , 56 bayt

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

Çevrimiçi deneyin!


Bu zorluğa yapılan gönderiler hiç bitecek mi? Şimdiye kadar her 40 dakikada bir yeni bir tane alıyorum: P
— Nissa

@StephenLeppik Oh hala daha fazla geliyorum, endişelenme.
— ATaco

@StephenLeppik Yapmamayı tercih ederim, çünkü çeşitli dillerde çeşitli kalitelere sahipler.
— ATaco,

@StephenLeppik Onları senin için birleştirdim, yalvarmadan.
— ATaco,

4
Lütfen bunu yapma. Ayrı diller - ayrı yaklaşımlar bile - ayrı cevaplara girmelidir.
— Dennis,


5

Matl , 4 bayt

t:\s

Çevrimiçi deneyin!

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

EDIT: Değişen aralık (0, n) ile aralık (n)


2
Merhaba, siteye hoş geldiniz! rangeörtük olarak ilk bir argüman alır 0, bu yüzden bunu yaparak bunu iki bayt kısaltabilirsiniz range(n).
— DJMcMayhem

Vayy! Bunu bile düşünmedim. Teşekkürler
— Max00355

1
PPCG'ye Hoşgeldiniz! map38 bayt yerine bir liste anlama kullanabilirsiniz : Çevrimiçi deneyin!
— Bay Xcoder

Haklısınız, ancak Neil'in cevabında kullanıldı, bu yüzden kopyalamanın en iyi şey olup olmadığından emin değildim. Tabii burada bir şey kaçırmıyorsam. Alternatifini biraz daha uzun olsa bile göndermek istedim.
— Max00355




3

Standart ML (MLton) , 53 51 bayt

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

Çevrimiçi deneyin!

Ungolfed:

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

Önceki 53 bayt sürümü:

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

Çevrimiçi deneyin!

Açıklama:

List.tabulatebir tamsayı xve işlev alır fve listeyi oluşturur [f 0, f 1, ..., f(x-1)]. Bazı sayı göz önüne alındığında n, biz diyoruz List.tabulateile n-1ve fonksiyon fn i=>n mod(i+1)sıfıra bölme önlemek için. Sonuçta ortaya çıkan liste ile toplanır foldl op+0.





3

Japt , 6 5 bayt

@Shaggy sayesinde 1 bayt kaydedildi

Æ%XÃx

Çevrimiçi test edin!

Nasıl çalışır

         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 bayt

ÎGIN%+

Çevrimiçi deneyin!

İlk 05AB1E programım;)

Btw JS6 için 1 ve python için 1 iki 39 var, ancak çok geç kaldım

Açıklama:

Î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 bayt ekle

L,RAdx$p@BcB%s

Çevrimiçi deneyin!

Nasıl çalışır

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 Toplu İşi (CMD), 63 bayt

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

Önceki 64 bayt sürümü:

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

2

T-SQL, 80 79 bayt

@MickyT sayesinde -1 bayt

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

Buna benzer bir tamsayı parametresinden girdi alır @:

DECLARE @ int = 14;

Numaraları oluşturmak için bir ortak tablo Expression kullanır 1için n. Sonra modülleri özetlemek için bu cte kullanır.

Not: Bir cte ;önceki cümle ile cte arasında bir değere ihtiyaç duyar . Gördüğüm çoğu kod ;, bildirimin hemen önüne geçiyor, ancak bu durumda bir byte'ı giriş ifadesinde bulundurarak kaydedebilirim (çünkü teknik olarak benim kodum tek ifadedir).

Deneyin (SEDE)


Daha az "SQL-y" yolu sadece 76 bayttır. Bu kez giriş değişkeni @iyerine @(bir bayt kaydeder). Bu sadece bir whiledöngü yapar .

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




1

Kabuğu , 5 bayt

ΣṠM%ḣ

Çevrimiçi deneyin!

açıklama

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

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

Çevrimiçi deneyin!


Aslında ben senden farklı bir 5 byter buldum, seninkileri doğru okumadım
— Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.