İkinci dereceden kalıntılar çok eğlenceli!


13

Tanımlar

İkinci dereceden kalıntılar

Bir tamsayı x varsa , bir tamsayı r kuadratik artık modülü n denir :x

x2r(modn)

İkinci dereceden kalıntılar modulo n grubu, 0 \ le x \ le \ lfloor n / 2 \ rfloor için x2modn sonuçlarına bakarak basitçe hesaplanabilir .0xn/2

Meydan okuma dizisi

Bu tanımlar an aynı değer oluşum en az sayısı (r0r1+n)modn çiftleri için (r0,r1) modulo kuadratik tortuların n .

İlk 30 terim:

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

Bu A316975 (kendim gönderdim).

Örnek: n=10

İkinci dereceden kalıntılar modulo 10 , 0 , 1 , 4 , 5 , 6 ve 9 .

Bu ikinci dereceden tortuların her çifti (r0,r1) için, aşağıdaki tabloya götüren (r0r1+10)mod10 (burada r0 solda ve r1 üstte):

014569009654111076524430985554109666521079985430

Yukarıdaki tabloda aynı değerin minimum tekrar sayısı ( , , ve ). Bu nedenle .22378a10=2

Senin görevin

  • Şunlardan birini yapabilirsiniz:

    • tamsayısını alın ve yazdırın veya (0 dizinli veya 1 dizinli)nan
    • tamsayısını alın ve dizinin ilk terimini yazdırın veya döndürünnn
    • giriş almayın ve diziyi sonsuza dek yazdırın
  • Kodunuz, dizinin ilk 50 değerinden herhangi birini 1 dakikadan daha kısa bir sürede işleyebilmelidir.
  • Yeterli zaman ve bellek verildiğinde, kodunuzun teorik olarak diliniz tarafından desteklenen herhangi bir pozitif tamsayı için çalışması gerekir.
  • Bu .

9
OEIS'te yayınlanmış bir diziye sahip olduğunuz için teşekkür ederiz!
AdmBorkBork

@AdmBorkBork Teşekkürler. :) (Aslında, bir OEIS dizisini bir meydan okuma olarak olduğu gibi göndermekten kaçınırım, ama sanırım bu bir sorun değil.)
Arnauld

6
Does not +niçeride (...)mod nhiçbir etkisi yoktur? Öyleyse, tanımın bir parçası olan çok garip.
Jonathan Allan

3
@JonathanAllan Aslında, dizinin taslak versiyonunda benzer bir açıklama yaptım ve kaldırıldığını önerdim. Ancak net bir fikir birliği bulamadım ve bununla ilgili herhangi bir geri bildirim almadım. (Ve diğer dizileri gördüklerini hatırlıyorum gibi görünüyor (some_potentially_negative_value + n) mod n.) Bence , sonucun işareti dile bağlı olduğundan, bir programlama zorluğuna sahip olmak daha iyi .
Arnauld

1
Başarısız doğrudan bir formül bulmaya çalıştım. Dizi çarpımsaldır ve primerlerde eşittir a_p = round(p/4), bu da bize tüm karesız sayılar için değerleri verir. Ancak durum, primerlerin güçlerinde karmaşık görünüyor ve 3 mod 4 ve 1 mod 4 vakasının ayrı ayrı ele alınması gerekiyor.
xnor

Yanıtlar:


5

MATL , 14 bayt

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

Çevrimiçi deneyin! Veya ilk 30 değeri doğrulayın .

açıklama

:      % 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 -g , 22 20 bayt

Zorluğun ne hakkında olduğunu anlamak için çok uzun zaman harcadım, daha fazla golf için zaman tükendi: \

Çıkışlar nsırayla dönem,. Girdiğinde mücadele etmeye başlar >900.

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

Deneyin ya da 0-50 için sonuçları kontrol edin


açıklama

                  :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

Jöle ,  13  10 bayt

-1 Dennis sayesinde, (a lider ile diyadik yorumlanması zorlama ð)
-2 daha da Dennis sayesinde (çiftleri olabilir çünkü kopyalanmamış biz önlemek Rve 2)

ðp²%QI%ĠẈṂ

Negatif olmayan bir tamsayı veren pozitif bir tamsayıyı kabul eden monadik bir bağlantı.

Çevrimiçi deneyin! Veya ilk 50 terimi inceleyin .

Nasıl?

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

LnI%êãÆI%D.m¢

@Mr sayesinde -2 bayt . Xcoder .

Çevrimiçi deneyin veya ilk 99 test vakasını doğrulayın (yaklaşık 3 saniye içinde) . (NOT: Python eski sürümü, yeni Elixir yeniden yazma yerine TIO'da kullanılır. Yaklaşık 10 kat daha hızlıdır, ancak altbilgiye eklediğim tek bir öğe yerine bir liste döndürdüğü için bir iz ¬(başlık) gerektirir .m.)

Açıklama:

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¢. (eski sürümde değil, yeni sürümde)
Bay Xcoder

@ Mr.Xcoder Ah, ben ..> yerine kullanmak için bir aptalım . Başlangıçta yeni sürüme sahiptim, ancak çalışmadığını fark ettikten sonra mirasa geçtim (ile düzelttiğiniz ). Yine de TIO'daki mirası kullanıyorum, çünkü bu meydan okuma için çok daha hızlı. ã.m¥Æ
Kevin Cruijssen

3

C (GCC) , 202 , 200 190 188 187 186 bayt

  • Kaydedilen iki oniki ondört -e doğru onbeş bayt sayesinde ceilingcat .
  • Bir bayt kaydedildi.
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;}

Çevrimiçi deneyin!


@ ceilingcat Serin; başka bir tamsayıyı bildirmek aslında başka bir baytın kaydedilmesini sağlar.
Jonathan Frech

@ceilingcat Sanırım en küçük pozitif modulo kalıntısına ihtiyacım olduğu için bu ifadeler eşdeğer değil.
Jonathan Frech


1

K (ngn / k) , 29 bayt

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

Çevrimiçi deneyin!

{ } argüman ile işlev x

!xdan tamsayılar 0içinx-1

i: atamak i

x! şık x

? benzersiz

r: atamak r

-\: her soldan çıkart

r-\:r tüm farklılıkların matrisi

x! şık x

,/ matrisin satırlarını bitiştir

= grubu, benzersiz değerlerden tekrarlama endeksleri listesine bir sözlük döndürür

#:' sözlükteki her bir değerin uzunluğu

&/ asgari




1

APL (Dyalog Unicode) , 28 24 bayt

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

Çevrimiçi deneyin!

Önek doğrudan işlevi. Kullanır ⎕IO←0.

4 bayt için Cows quack teşekkürler!

Nasıl:

{⌊/⊢∘≢⌸∊⍵|∘.-⍨∪⍵|×⍨⍳⍵+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
Birkaç küçük bayt talaşı, 2*⍨×⍨, r←¨⊂r∘.-⍨, {≢⍵}⊢∘≢
user41805
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.