二次剰余はとても楽しいです!


13

定義

二次剰余

整数rは、次のような整数xが存在する場合、n法とする2次剰余と呼ばれます。バツ

バツ2rモッドn

を法とする2次剰余のセットは、0 \ le x \ le \ lfloor n / 2 \ rfloorx ^ 2 \ bmod nの結果を調べることで簡単に計算できます。nバツ2モッドn0バツn/2

チャレンジシーケンス

我々は定義an同じ値のオカレンスの最小数として(r0r1+n)modn全てのペアのための(r0,r1モジュロ平方剰余のn

最初の30の用語は次のとおりです。

1,2,1,1,1,2,2,1,1,2,3,1,3,4,1,1,4,2,5,1,2,6,6,1,2,6,2,2,7,2

これはA316975(自分で提出)です。

例:n=10

二次残基はモジュロ10である01456及び9

これらの2次剰余の各ペアr0r1について、r0r1+10モッド10を計算します。これにより、次の表が得られます(r0が左、r1が上)。

014569009654111076524430985554109666521079985430

上記の表の同じ値の最小出現回数は(、、および)。したがって、です。22378a10=2

あなたのタスク

  • 次のいずれかです。

    • 整数を取り、(0インデックス付きまたは1インデックス付き)を出力または返すnan
    • 整数を取り、シーケンスの最初のの項を出力または返すnn
    • 何も入力せずに、シーケンスを永久に出力します
  • コードは、シーケンスの最初の50個の値を1分未満で処理できる必要があります。
  • 十分な時間とメモリがあれば、コードは理論的には言語でサポートされている正の整数に対して機能する必要があります。
  • これはです。

9
OEISで公開されたシーケンスを取得することへの感謝!
AdmBorkBork

@AdmBorkBorkありがとう。:)(実際のところ、私は通常OEISシーケンスをそのままチャレンジとして投稿することを避けていますが、これはこれでいいと思います。)
Arnauld

6
しない+n内部には(...)mod n効果がありませんか?もしそうなら、それは定義の一部である非常に奇妙です。
ジョナサンアラン

3
@JonathanAllan実際、私はシーケンスのドラフト版で同様の発言を行い、削除することを提案しました。しかし、明確なコンセンサスは得られず、それについてのフィードバックも得られませんでした。(そして、で他のシーケンスを見たことを思い出すようです(some_potentially_negative_value + n) mod n。)結果のサインは言語に依存するのでプログラミングの挑戦でそれを持っている方が良いと思います。
アーナウルド

1
私は成功せずに直接式を見つけようとしました。シーケンスは乗法であり、素数ではそれはに等しくa_p = round(p/4)、すべての平方数の値を提供します。しかし、状況は素数の力では複雑に思え、3 mod 4と1 mod 4のケースは別々に処理する必要があります。
xnor

回答:



4

Japt -g22 20バイト

課題が実際に何であるかを理解するのに時間がかかりすぎ、さらにゴルフをする時間を使い果たしました:\

nシーケンスのth番目の用語を出力します。入力時に苦労し始めます>900

õ_²uUÃâ ïÍmuU
£è¥XÃn

試す、0-50の結果を確認してください


説明

                  :Implicit input of integer U
õ                 :Range [1,U]
 _                :Map
  ²               :  Square
   uU             :  Modulo U
     Ã            :End map
      â           :Deduplicate
        ï         :Cartesian product of the resulting array with itself
         Í        :Reduce each pair by subtraction
          m       :Map
           uU     :  Absolute value of modulo U
\n                :Reassign to U
£                 :Map each X
 è                :  Count the elements in U that are
  ¥X              :   Equal to X
    Ã             :End map
     n            :Sort
                  :Implicitly output the first element in the array

4

ゼリー 13  10 バイト

-1デニスのおかげ(主要有するダイアディック解釈を強制ð
(ペアは、我々は避けることができるド複製することができるので、デニス-2よりも感謝R2

ðp²%QI%ĠẈṂ

非負の整数を生成する正の整数を受け入れる単項リンク。

オンラインでお試しください!または、最初の50項を参照してください。

どうやって?

ðp²%QI%ĠẈṂ - Link: integer, n                   e.g. 6
ð          - start a new dyadic chain - i.e. f(Left=n, Right=n)
 p         - Cartesian product of (implicit ranges)  [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[4,1],[4,2],[4,3],[4,4],[4,5],[4,6],[5,1],[5,2],[5,3],[5,4],[5,5],[5,6],[6,1],[6,2],[6,3],[6,4],[6,5],[6,6]]
  ²        - square (vectorises)                     [[1,1],[1,4],[1,9],[1,16],[1,25],[1,36],[4,1],[4,4],[4,9],[4,16],[4,25],[4,36],[9,1],[9,4],[9,9],[9,16],[9,25],[9,36],[16,1],[16,4],[16,9],[16,16],[16,25],[16,36],[25,1],[25,4],[25,9],[25,16],[25,25],[25,36],[36,1],[36,4],[36,9],[36,16],[36,25],[36,36]]
   %       - modulo (by Right) (vectorises)          [[1,1],[1,4],[1,3],[1,4],[1,1],[1,0],[4,1],[4,4],[4,3],[4,4],[4,1],[4,0],[3,1],[3,4],[3,3],[3,4],[3,1],[3,0],[4,1],[4,4],[4,3],[4,4],[4,1],[4,0],[1,1],[1,4],[1,3],[1,4],[1,1],[1,0],[0,1],[0,4],[0,3],[0,4],[0,1],[0,0]]
    Q      - de-duplicate                            [[1,1],[1,4],[1,3],[1,0],[4,1],[4,4],[4,3],[4,0],[3,1],[3,4],[3,3],[3,0],[0,1],[0,4],[0,3],[0,0]]
     I     - incremental differences (vectorises)    [0,3,2,-1,-3,0,-1,-4,-2,1,0,-3,1,4,3,0]
      %    - modulo (by Right) (vectorises)          [0,3,2,5,3,0,5,2,4,1,0,3,1,4,3,0]
       Ġ   - group indices by value                  [[1,6,11,16],[10,13],[3,8],[2,5,12,15],[9,14],[4,7]]
        Ẉ  - length of each                          [3,2,2,4,2,2]
         Ṃ - minimum                                 2

3

05AB1E22 20 15 13 バイト

LnI%êãÆI%D.m¢

@Mrのおかげで-2バイト Xcoder

オンラインそれを試してみたり(約3秒)最初の99のテストケースを検証します。(注:Pythonのレガシーバージョンは、新しいElixirの書き換えではなくTIOで使用されます。約10倍高速ですが、フッターに追加した単一のアイテムではなくリストを返す¬ため、末尾(ヘッド)が必要.mです。

説明:

L       # Create a list in the range [1, (implicit) input]
 n      # Square each
  I%    # And then modulo each with the input
    ê   # Sort and uniquify the result (faster than just uniquify apparently)
 ã      # Create pairs (cartesian product with itself)
  Æ     # Get the differences between each pair
   I%   # And then modulo each with the input
D.m     # Take the least frequent number (numbers in the legacy version)
   ¢    # Take the count it (or all the numbers in the legacy version, which are all the same)
        # (and output it implicitly)

Ýns%ÙãÆI%D.m¢。(レガシーではなく、新バージョン)
Mr. Xcoder

@ Mr.Xcoderああ、私は..>。>の代わりに使うばかãです。そして.m、Elixirの書き直しで異なる動作をすることを知りませんでした。私はもともと新しいバージョンを持っていましたが、それが機能して¥いないことに気付いた後、レガシーに切り替えました(これはで修正しましたÆ)。ただし、TIOでレガシーを使用するのは、この課題に対してはるかに高速だからです。
ケビンクルイッセン

3

C(GCC) 202の 200 190 188 187 186バイト

  • 保存された2 12本の 14 15は、おかげバイトceilingcatを
  • バイトを保存しました。
Q(u,a){int*d,*r,A[u],t,i[a=u],*c=i,k;for(;a--;k||(*c++=a*a%u))for(k=a[A]=0,r=i;r<c;)k+=a*a%u==*r++;for(r=c;i-r--;)for(d=i;d<c;++A[(u+*r-*d++)%u]);for(t=*A;++a<u;t=k&&k<t?k:t)k=A[a];u=t;}

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


@ceilingcat Cool; 別の整数を宣言すると、実際には別のバイトを保存できます。
ジョナサンフレッチ

@ceilingcat最小の正の剰余剰余が必要なので、これらの式は等価ではないと思います。
ジョナサンフレッチ


1

K(ngn / k)、29バイト

{&/#:'=,/x!r-\:r:?x!i*i:!x}

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

{ } 引数付きの関数 x

!x整数0x-1

i: に割り当てます i

x! モッド x

? ユニークな

r: に割り当てます r

-\: 各左から引く

r-\:r すべての違いのマトリックス

x! モッド x

,/ 行列の行を連結します

= グループ、一意の値から出現インデックスのリストに辞書を返します

#:' 辞書内の各値の長さ

&/ 最小




1

APL(Dyalog Unicode)28 24バイト

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+1}

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

プレフィックスダイレクト機能。を使用し⎕IO←0ます。

4バイトのカウズのおかげです!

どうやって:

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+1}  Dfn, argument 

                   ⍳⍵+1  Range [0..⍵]
                 ×⍨      Squared
               ⍵|        Modulo 
                        Unique
          ∘.-⍨           Pairwise subtraction table
       ∊⍵|               Modulo ⍵, flattened
                        Key; groups indices (in its ⍵) of values (in its ⍺).
   ⊢∘≢                   Tally (≢) the indices. This returns the number of occurrences of each element.
 ⌊/                       Floor reduction; returns the smallest number.

1
2*⍨×⍨r←¨⊂r∘.-⍨{≢⍵}⊢∘≢
いくつか
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.