Dư lượng bậc hai là rất nhiều niềm vui!


13

Các định nghĩa

Dư lượng bậc hai

Một số nguyên được gọi là phần dư bậc hai modulo nếu tồn tại số nguyên sao cho:rnx

x2r(modn)

Tập hợp dư lượng bậc hai modulo n có thể được tính toán đơn giản bằng cách xem kết quả của x2modn cho 0xn/2 .

Chuỗi thử thách

Chúng tôi xác định mộtn là số lần xuất hiện tối thiểu của cùng một giá trị (r0-r1+n)modn cho tất cả các cặp (r0,r1) của dư lượng bậc hai modulo n .

30 điều khoản đầu tiên là:

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

Đây là A316975 (do chính tôi gửi).

Ví dụ: n=10

Các dư lượng bậc hai modulo 100 , 1 , 4 , 5 , 69 .

Đối với mỗi cặp (r0,r1) của các dư lượng bậc hai này, chúng tôi tính toán (r0r1+10)mod10 , dẫn đến bảng sau (trong đó r0 ở bên trái và r1 ở trên cùng):

014569009654111076524430985554109666521079985430

Số lần xuất hiện tối thiểu của cùng một giá trị trong bảng trên là 2 (cho 2 , 3 , 78 ). Do đó a10=2 .

Nhiệm vụ của bạn

  • Bạn có thể:

    • lấy một số nguyên và in hoặc trả về (0-index hoặc 1-index)nan
    • lấy một số nguyên và in hoặc trả về đầu tiên của chuỗinn
    • không có đầu vào và in chuỗi mãi mãi
  • Mã của bạn phải có thể xử lý bất kỳ trong số 50 giá trị đầu tiên của chuỗi trong vòng chưa đầy 1 phút.
  • Cho đủ thời gian và bộ nhớ, mã của bạn về mặt lý thuyết phải hoạt động đối với bất kỳ số nguyên dương nào được hỗ trợ bởi ngôn ngữ của bạn.
  • Đây là .

9
Grats về việc nhận được một chuỗi được xuất bản trên OEIS!
admBorkBork

@AdmBorkBork Cảm ơn. :) (Như một vấn đề thực tế, tôi thường tránh đăng một chuỗi OEIS như là một thách thức, nhưng tôi đoán điều đó cũng ổn đối với điều này.)
Arnauld

6
Không phải +nbên trong (...)mod nkhông có tác dụng? Nếu vậy, nó rất kỳ lạ, đó là một phần của định nghĩa.
Jonathan Allan

3
@Jonathan ALLan Thật ra, tôi đã nhận xét tương tự trong phiên bản nháp của trình tự và đề nghị rằng nó đã bị xóa. Nhưng tôi đã không tìm thấy bất kỳ sự đồng thuận rõ ràng nào, tôi cũng không nhận được bất kỳ phản hồi nào về điều đó. (Và tôi dường như nhớ lại đã từng thấy các trình tự khác (some_potentially_negative_value + n) mod n.) Tôi nghĩ rằng tốt hơn là nên thực hiện nó trong một thử thách lập trình, vì dấu hiệu của kết quả phụ thuộc vào ngôn ngữ .
Arnauld

1
Tôi đã cố gắng tìm một công thức trực tiếp mà không thành công. Chuỗi này là số nhân và trên các số nguyên tố nó bằng nhau a_p = round(p/4), nó cung cấp cho chúng ta các giá trị cho tất cả các số vuông. Nhưng tình hình có vẻ phức tạp về quyền hạn của các số nguyên tố, và các trường hợp 3 mod 4 và 1 mod 4 cần được xử lý riêng.
xnor

Câu trả lời:



4

Japt -g , 22 20 byte

Đã dành quá lâu để tìm hiểu xem thử thách thực sự là gì, đã hết thời gian để chơi gôn: \

Xuất ra nthuật ngữ thứ trong chuỗi. Bắt đầu vật lộn khi đầu vào >900.

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

Hãy thử hoặc kiểm tra kết quả cho 0-50


Giải trình

                  :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

Thạch ,  13  10 byte

-1 nhờ Dennis (buộc giải thích dyadic bằng cách dẫn đầu ð)
-2 cũng nhờ Dennis (vì các cặp có thể được sao chép lại, chúng tôi có thể tránh một Rvà a 2)

ðp²%QI%ĠẈṂ

Một liên kết đơn âm chấp nhận một số nguyên dương mang lại một số nguyên không âm.

Hãy thử trực tuyến! Hoặc xem 50 điều khoản đầu tiên .

Làm sao?

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

LnI%êãÆI%D.m¢

-2 byte nhờ @Mr. Xcoder .

Dùng thử trực tuyến hoặc xác minh 99 trường hợp thử nghiệm đầu tiên (trong khoảng 3 giây) . (LƯU Ý: Phiên bản kế thừa Python được sử dụng trên TIO thay vì viết lại Elixir mới. Nó nhanh hơn khoảng 10 lần, nhưng yêu cầu một dấu ¬(đầu) vì .mtrả về một danh sách thay vì một mục duy nhất mà tôi đã thêm vào chân trang.)

Giải trình:

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¢. (không phải trong di sản, trong phiên bản mới)
Ông Xcoder

@ Mr.Xcoder Ah, tôi là một thằng ngốc sử dụng thay vì ã..>.> Và không biết .mhành động khác trong cách viết lại Elixir. Ban đầu tôi đã có phiên bản mới, nhưng đã chuyển sang di sản sau khi tôi nhận thấy phiên bản ¥không hoạt động (mà bạn đã sửa với Æ). Mặc dù vậy, tôi vẫn sử dụng di sản trên TIO, vì nó nhanh hơn cho thử thách này.
Kevin Cruijssen

3

C (gcc) , 202 200 190 188 187 186 byte

  • Đã lưu hai mười hai mười bốn mười lăm byte nhờ trần .
  • Đã lưu một byte.
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;}

Hãy thử trực tuyến!


@ceilingcat Mát mẻ; khai báo một số nguyên khác thực sự cho phép lưu một byte khác.
Jonathan Frech

@ceilingcat Tôi nghĩ những biểu thức đó không tương đương vì tôi cần dư lượng modulo dương nhỏ nhất.
Jonathan Frech


1

K (ngn / k) , 29 byte

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

Hãy thử trực tuyến!

{ } chức năng với đối số x

!xsố nguyên từ 0đếnx-1

i: giao cho i

x! mod x

? độc nhất

r: giao cho r

-\: trừ đi mỗi bên trái

r-\:r ma trận của tất cả sự khác biệt

x! mod x

,/ nối các hàng của ma trận

= nhóm, trả về một từ điển từ các giá trị duy nhất vào danh sách các chỉ số xuất hiện

#:' độ dài của mỗi giá trị trong từ điển

&/ tối thiểu




1

APL (Dyalog Unicode) , 28 24 byte

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

Hãy thử trực tuyến!

Tiền tố chức năng trực tiếp. Công dụng ⎕IO←0.

Nhờ có quẻ bò cho 4 byte!

Làm sao:

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+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
Cặp dao cạo byte nhỏ, 2*⍨×⍨, r←¨⊂r∘.-⍨,{≢⍵}⊢∘≢
dao cạo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.