이차 잔류 물이 너무 재미있다!


13

정의

이차 잔류 물

정수 x 가 존재하는 경우 , 정수 r 2 차 잔차 모듈로 n 이라고 한다 :x

x2r(modn)

이차 잔차 모듈로 n 의 집합은 0 \ le x \ le \ lfloor n / 2 \ rfloor에 대한 x2modn 의 결과를보고 간단히 계산할 수 있습니다 .0xn/2

도전 순서

an 을 2 차 잔차 모듈로 n 의 모든 쌍 (r_0, r_1) 에 대해 동일한 값 (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

2 차 잔기 모듈로 100 , 1 , 4 , 5 , 69 이다.

이 2 차 (r0,r1) 각 쌍 (r_0, r_1) 에 대해 (r0r1+10)mod10 을 계산하면 다음 표로 이어집니다 ( r0 은 왼쪽에 있고 r1 은 맨 위에 있습니다).

014569009654111076524430985554109666521079985430

위 표에서 동일한 값의 최소 발생 횟수는 ( , , 및 ). 따라서 입니다.22378a10=2

당신의 작업

  • 다음 중 하나 일 수 있습니다.

    • 정수 취하여 인쇄하거나 리턴합니다 (0 색인 또는 1 색인)nNan
    • 정수 취하여 시퀀스 의 번째 항을 인쇄하거나 반환nn
    • 입력을받지 않고 시퀀스를 영원히 인쇄
  • 코드는 1 분 이내에 시퀀스의 첫 50 개 값 중 하나를 처리 할 수 ​​있어야합니다.
  • 충분한 시간과 메모리가 주어지면 코드는 이론적으로 언어에서 지원하는 양의 정수에 대해 작동해야합니다.
  • 이것은 입니다.

9
OEIS에 게시 된 시퀀스를 얻는 데 감사드립니다!
AdmBorkBork

@AdmBorkBork 감사합니다. :) (실제로, 나는 OEIS 시퀀스를 챌린지로 게시하는 것을 피하지만, 이것으로도 괜찮습니다.)
Arnauld

6
하지 않습니다 +n내부에는 (...)mod n아무런 영향이 없다? 그렇다면 정의의 일부인 것은 매우 이상합니다.
Jonathan Allan

3
@JonathanAllan 사실, 나는 시퀀스의 초안 버전에서 비슷한 말을하고 그것이 제거되었다고 제안했다. 그러나 나는 명확한 합의를 찾지 못했고 그것에 대한 의견도 얻지 못했습니다. (그리고 다른 시퀀스를 보았던 것을 기억하는 것 같습니다 (some_potentially_negative_value + n) mod n.) 결과의 부호가 언어에 달려 있기 때문에 프로그래밍 도전에 참여하는 것이 좋습니다 .
Arnauld

1
나는 성공하지 않고 직접 공식을 찾으려고 노력했다. 이 시퀀스는 곱셈이며 소수 a_p = round(p/4)에 대해 같으므로 모든 제곱없는 숫자에 대한 값을 제공합니다. 그러나 소수의 상황에서는 상황이 복잡해 보이므로 3 mod 4 및 1 mod 4 경우를 별도로 처리해야합니다.
xnor

답변:



4

apt -g , 22 20 바이트

도전이 실제로 무엇인지 알아내는 데 너무 오래 보냈습니다. 추가 골프를 할 시간이 부족했습니다.

n순서대로 일 항을 출력합니다 . 입력시 어려움을 겪습니다 >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 바이트

Dennis 덕분에 -1 (진행으로 이차원적인 해석을 강요 함 ð)
-2 Dennis로 인해 더 많은 것-쌍이 중복 될 수 있으므로 Ra와 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

05AB1E , 22 20 15 13 바이트

LnI%êãÆI%D.m¢

@Mr 덕분에 -2 바이트 Xcoder .

온라인으로 시도 하거나 처음 99 개의 테스트 사례를 확인하십시오 (약 3 초) . (참고 : 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¢. (레거시가 아닌 새 버전에서는)
Xcoder Mr.

@ Mr.Xcoder Ah, 나는 ..>.> 대신에 사용하는 바보 입니다. 나는 원래 새로운 버전을 가지고 있었지만 작동하지 않는 것을 발견 한 후에 레거시로 전환했습니다 . 그래도 여전히 TIO에서 레거시를 사용합니다. 왜냐하면이 과제는 더 빠르기 때문입니다. ã.m¥Æ
Kevin Cruijssen

3

C (GCC) , 202 (200) 190 188 187 186 바이트

  • 저장된 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 쿨; 다른 정수를 선언하면 실제로 다른 바이트를 저장할 수 있습니다.
Jonathan Frech

@ceilingcat 나는 작은 양의 모듈로 잔류 물이 필요하기 때문에 그 표현이 동일하지 않다고 생각합니다.
Jonathan Frech


1

K (ngn / k) , 29 바이트

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

온라인으로 사용해보십시오!

{ } 인수 기능 x

!x에서 0~ 까지의 정수x-1

i: 할당하다 i

x! 모드 x

? 독특한

r: 할당하다 r

-\: 각 왼쪽에서 빼기

r-\:r 모든 차이점의 행렬

x! 모드 x

,/ 행렬의 행을 연결

= 그룹, 고유 한 값에서 발생 색인 목록으로 사전을 리턴합니다.

#:' 사전에있는 각 값의 길이

&/ 최저한의




1

APL (Dyalog Unicode) , 28 24 바이트

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

온라인으로 사용해보십시오!

접두사 직접 기능. 사용합니다 ⎕IO←0.

4 바이트의 Cows ck에 감사합니다!

어떻게:

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+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.