Residu kuadrat sangat menyenangkan!

13

Definisi

Residu kuadratik

Integer r disebut residu kuadrat modulo n jika ada integer x sehingga:

x2r(modn)

nx2modn0xn/2

Urutan tantangan

Kami mendefinisikan sebagai jumlah minimum kejadian dengan nilai yang sama untuk semua pasangan dari modul kuadrat residu modulo .an(r0r1+n)modn(r0,r1)n

30 istilah pertama adalah:

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

Ini adalah A316975 (dikirimkan oleh saya sendiri).

Contoh:n=10

Modulo residu kuadrat adalah , , , , dan .10014569

Untuk setiap pasangan dari residu kuadratik ini, kami menghitung , yang mengarah ke tabel berikut (di mana di sebelah kiri dan di atas):(r0,r1)(r0r1+10)mod10r0r1

014569009654111076524430985554109666521079985430

Jumlah minimum kejadian dengan nilai yang sama dalam tabel di atas adalah (untuk , , dan ). Karenanya .22378a10=2

Tugas Anda

  • Anda dapat:

    • mengambil integer n dan mencetak atau kembali an (baik 0-diindeks atau 1-diindeks)
    • ambil bilangan bulat n dan cetak atau kembalikan n syarat pertama urutannya
    • tidak mengambil input dan mencetak urutan selamanya
  • Kode Anda harus dapat memproses salah satu dari 50 nilai pertama dari urutan dalam waktu kurang dari 1 menit.
  • Diberi cukup waktu dan memori, kode Anda secara teoritis harus berfungsi untuk bilangan bulat positif yang didukung oleh bahasa Anda.
  • Ini adalah .
Arnauld
sumber
9
Terima kasih telah mendapatkan urutan yang diterbitkan di OEIS!
AdmBorkBork
@ AdmBorkBork Terima kasih. :) (Sebenarnya, saya biasanya menghindari memposting urutan OEIS apa adanya sebagai tantangan, tapi saya rasa tidak apa-apa untuk yang ini.)
Arnauld
6
Bukankah bagian +ndalam (...)mod ntidak berpengaruh? Jika demikian, itu sangat aneh yang merupakan bagian dari definisi.
Jonathan Allan
3
@ JonathanAllan Sebenarnya, saya membuat komentar serupa di versi konsep urutan dan menyarankan bahwa itu dihapus. Tetapi saya tidak menemukan konsensus yang jelas, saya juga tidak mendapat tanggapan tentang itu. (Dan sepertinya saya ingat pernah melihat urutan lain dengan (some_potentially_negative_value + n) mod n.) Saya pikir lebih baik untuk memilikinya dalam tantangan pemrograman, karena tanda hasilnya tergantung pada bahasa .
Arnauld
1
Saya sudah mencoba mencari formula langsung tanpa hasil. Urutannya adalah multiplikatif dan pada bilangan prima sama a_p = round(p/4), yang memberi kita nilai untuk semua bilangan kuadrat. Tapi situasinya tampaknya rumit pada kekuatan bilangan prima, dan 3 mod 4 dan 1 mod 4 kasus perlu ditangani secara terpisah.
xnor

Jawaban:

5

MATL , 14 byte

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

Cobalah online! Atau verifikasi 30 nilai pertama .

Penjelasan

:      % 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
Luis Mendo
sumber
4

Japt -g , 22 20 byte

Terlalu lama mencari tahu apa tantangan sebenarnya, kehabisan waktu untuk bermain golf lebih lanjut: \

Menghasilkan nistilah th dalam urutan. Mulai kesulitan saat input >900.

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

Cobalah atau periksa hasilnya untuk 0-50


Penjelasan

                  :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
Shaggy
sumber
4

Jelly ,  13  10 byte

-1 terima kasih kepada Dennis (memaksa interpretasi diadik dengan pemimpin ð)
-2 lebih banyak juga berkat Dennis (karena pasangan dapat diduplikasi kita dapat menghindari a Rdan a 2)

ðp²%QI%ĠẈṂ

Tautan monadik yang menerima bilangan bulat positif yang menghasilkan bilangan bulat non-negatif.

Cobalah online! Atau lihat 50 istilah pertama .

Bagaimana?

ð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
Jonathan Allan
sumber
3

05AB1E , 22 20 15 13 byte

LnI%êãÆI%D.m¢

-2 byte terima kasih kepada @Mr. Xcoder .

Cobalah secara online atau verifikasi 99 kasus pengujian pertama (sekitar 3 detik) . (CATATAN: Versi warisan Python digunakan pada TIO alih-alih penulisan ulang Elixir yang baru. Ini sekitar 10x lebih cepat, tetapi membutuhkan trailing ¬(kepala) karena .mmengembalikan daftar alih-alih satu item, yang telah saya tambahkan ke catatan kaki.)

Penjelasan:

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)
Kevin Cruijssen
sumber
Ýns%ÙãÆI%D.m¢. (tidak dalam warisan, dalam versi baru)
Tn. Xcoder
@ Mr.Xcoder Ah, saya idiot untuk digunakan alih-alih ã..>.> Dan tidak tahu tindakannya .mberbeda dalam penulisan ulang Elixir. Saya awalnya memiliki versi baru, tetapi beralih ke warisan setelah saya perhatikan ¥tidak berfungsi (yang telah Anda perbaiki dengan Æ). Saya masih menggunakan warisan pada TIO, karena cara ini lebih cepat untuk tantangan ini.
Kevin Cruijssen
3

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

  • Disimpan dua belas empat belas lima belas byte berkat ceilingcat .
  • Disimpan satu 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;}

Cobalah online!

Jonathan Frech
sumber
@ceilingcat Keren; mendeklarasikan integer lain sebenarnya memungkinkan untuk menyimpan byte lain.
Jonathan Frech
@ceilingcat Saya pikir ekspresi itu tidak setara karena saya perlu residu modulo positif terkecil.
Jonathan Frech
1

Python 2 , 97 byte

def f(n):r={i*i%n for i in range(n)};r=[(s-t)%n for s in r for t in r];return min(map(r.count,r))

Cobalah online!

Chas Brown
sumber
1

K (ngn / k) , 29 byte

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

Cobalah online!

{ } berfungsi dengan argumen x

!xbilangan bulat dari 0kex-1

i: menetapkan ke i

x! mod x

? unik

r: menetapkan ke r

-\: kurangi dari masing-masing kiri

r-\:r matriks semua perbedaan

x! mod x

,/ menyatukan baris matriks

= grup, mengembalikan kamus dari nilai unik ke daftar indeks kemunculan

#:' panjang setiap nilai dalam kamus

&/ minimum

ngn
sumber
1

Ruby , 88 byte

->n{(z=(w=(0..n).map{|x|x*x%n}|[]).product(w).map{|a,b|(a-b)%n}).map{|c|z.count(c)}.min}

Cobalah online!

GB
sumber
1

APL (Dyalog Unicode) , 28 24 byte

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

Cobalah online!

Awalan fungsi langsung. Penggunaan ⎕IO←0.

Berkat Sapi dukun untuk 4 byte!

Bagaimana:

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+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.
J. Sallé
sumber
1
Sepasang serutan byte kecil, 2*⍨×⍨, r←¨⊂r∘.-⍨, {≢⍵}⊢∘≢
Kritixi Lithos