二次残差非常有趣!


13

定义

二次残基

如果存在整数,则整数称为为模的二次余数:rñ Xnx

x2r(modn)

可以通过查看x ^ 2 \ bmod n对于0 \ le x \ le \ lfloor n / 2 \ rfloor的结果,简单地计算出模n的二次x2modn0xn/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

二次模的残基10014569

对于这些二次残基的每对(r0,r1),我们计算(r0r1+10)mod10,从而得出下表(其中r0在左侧,r1在顶部):

014569009654111076524430985554109666521079985430

上表中出现相同值的最小次数为(对于,,和)。因此。22378a10=2

你的任务

  • 您可以:

    • 取整数并打印或返回(0索引或1索引)nan
    • 取整数并打印或返回序列的第一项nn
    • 不输入任何内容并永久打印序列
  • 您的代码必须能够在不到1分钟的时间内处理序列的50个第一个值。
  • 如果有足够的时间和内存,理论上您的代码必须能为您的语言支持的任何正整数工作。
  • 这是

9
希望获得在OEIS上发布的序列!
AdmBorkBork

@AdmBorkBork谢谢。:)(事实上,我通常避免按原样发布OEIS序列,这是一个挑战,但我想这
对它来说还

6
不会在+n里面(...)mod n有没有影响?如果是这样,那是定义的一部分很奇怪。
乔纳森·艾伦,

3
@JonathanAllan实际上,我在序列的草稿版本中做了类似的评论,并建议将其删除。但是我没有找到任何明确的共识,也没有得到任何反馈。(而且我似乎还记得用过的其他序列(some_potentially_negative_value + n) mod n。)但是,我认为最好将其用于编程挑战中,因为结果的符号取决于语言
Arnauld

1
我试图找到一个没有成功的直接公式。该序列是可乘的,在质数上等于a_p = round(p/4),这为我们提供了所有无平方数的值。但是从素数的幂来看,情况似乎很复杂,3 mod 4和1 mod 4的情况需要分开处理。
xnor

Answers:


5

MATL,14字节

:UG\u&-G\8#uX<

在线尝试!验证前30个值

说明

:      % Implicit input. Range
U      % Square, element-wise
G      % Push input again
\      % Modulo, element-wise
u      % Unique elements
&-     % Table of pair-wise differences
G      % Push input
\      % Modulo, element-wise
8#u    % Number of occurrences of each element
X<     % Minimum. Implicit display

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感谢Dennis(用前导符强制进行二进位解释ð
-2还要感谢Dennis(由于可以对重复项进行重复数据删除,因此我们可以避免使用Rand和a 2

ð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¢

-2个字节感谢@Mr。Xcoder

在线尝试验证前99个测试用例(约3秒钟)。(注意:在TIO上使用的是Python旧版本,而不是新的Elixir重写。它的速度提高了约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¢。(不是旧版,而是新版本)
Xcoder先生

@ Mr.Xcoder嗯,我是一个白痴,而不是ã..>。>,而且不知道.mElixir重写中的行为有所不同。我最初使用的是新版本,但是在我注意到该版本¥不起作用(已使用修复了该问题Æ)后,改用旧版本。我仍然在TIO上使用旧版,因为它可以更快地应对这一挑战。
凯文·克鲁伊森

3

C(GCC) 202个 200 190 188 187 186字节

  • 多亏了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很酷;声明另一个整数实际上可以保存另一个字节。
乔纳森·弗雷希

@ceilingcat我认为这些表达式并不等效,因为我需要最小的正模余数。
乔纳森·弗雷希


1

K(ngn / k),29个字节

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

在线尝试!

{ } 带参数的功能 x

!x0到的整数x-1

i: 分配给 i

x!x

? 独特

r: 分配给 r

-\: 从每个左边减去

r-\:r 所有差异的矩阵

x!x

,/ 连接矩阵的行

= 组,将字典从唯一值返回到出现索引列表

#:' 字典中每个值的长度

&/ 最低




1

APL(Dyalog Unicode)28 24字节

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

在线尝试!

前缀直接功能。用途⎕IO←0

感谢Cows quack提供的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∘.-⍨{≢⍵}⊢∘≢
剃须
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.