モジュラス合計


27

このシーケンスはmod合計であるため、「イエスシーケンス」と呼びます。</ pun>

このシーケンスでは、入力nよりも小さい正の整数mをすべて取得し、各mを法とするnの合計を取得します。言い換えると:

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ます。

デスモスにペーストすると、ラテックスは次のようになります

ただし、グラフは次のようになります

ランダムに見え、あちこちで見えますが、それは整数のみをサポートしている結果です。

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)

オンラインでお試しください!

MaybeLater、56バイト

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

オンラインでお試しください!


このチャレンジへの提出は終わりますか?これまでのところ、私は新しいものに40分毎になってきた:Pを
Nissa

@StephenLeppikああ、私はまだもっと来ています、心配しないでください。
アタコ

@StephenLeppik私はむしろそうではありません。なぜならそれらはさまざまな言語でさまざまな品質のものだからです。
アタコ

@StephenLeppik残念ながらそれらを組み合わせました。
アタコ

4
これをしないでください。個別の言語-個別のアプローチであっても-個別の答えにすべきです。
デニス





4

Python 2、44バイト

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

オンラインでお試しください!

編集:range(0、n)をrange(n)に変更


2
こんにちは、サイトへようこそ!range暗黙的に最初の引数を受け取り0ます。そのため、range(n)代わりに行うことでこれを2バイト短縮できます。
DJMcMayhem

ああすごい!私もそれを考えていませんでした。ありがとう
Max00355

1
PPCGへようこそ!map38バイトの代わりにリスト内包表記を使用できます。オンラインで試してください!
ミスターXcoder

あなたは正しいですが、それはニールの答えで使用されていたので、それをコピーすることが最善かどうかはわかりませんでした。もちろん、ここで何かを見逃していない限り。少し長かったとしても、代替案を投稿したかったのです。
Max00355




3

標準ML(MLton)53 51バイト

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

オンラインでお試しください!

ゴルフをしていない:

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)]。いくつかの数値が与えられた場合、ゼロによる除算を回避するためにwith および関数nを呼び出します。結果のリストはで合計されます。List.tabulaten-1fn i=>n mod(i+1)foldl op+0






2

05AB1E、6バイト

ÎGIN%+

オンラインでお試しください!

私の最初の05AB1Eプログラム;)

ところで私は2つの39を手に入れました。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

Add ++、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バッチ(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バイト

@MickyTのおかげで-1バイト

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

@次のような名前の整数パラメータから入力を受け取ります。

DECLARE @ int = 14;

数字を生成するために共通テーブル式を使用1するがn。次に、そのcteを使用してモジュラスを合計します。

注:cteは;、前のステートメントとcteの間に必要です。私が見たほとんどのコード;は宣言の前に右を置きますが、この場合、入力ステートメントにバイトを入れることでバイトを保存できます(技術的にはコード自体が唯一のステートメントであるため)。

試してみてください(SEDE)


より少ない「SQL-y」の方法はわずか76バイトです。今回は入力変数の@i代わりになります@(1バイトを保存します)。これは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バイトを見つけましたが、あなたのものを正しく読みませんでした
デイブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.