สารตกค้างกำลังสองนั้นสนุกมาก!


13

คำนิยาม

ตกค้างกำลังสอง

จำนวนเต็มเรียกว่าquadratic residue moduloหากมีจำนวนเต็มเช่นนั้น:Rn xnx

x2r(modn)

ชุดของตกค้างแบบโมดูโลสามารถคำนวณได้โดยเพียงแค่มองไปที่ผลของการx ^ 2 \ n BMODสำหรับ0 \ le x \ le \ lfloor nnx2modn0xn/2

ลำดับความท้าทาย

เรากำหนดanเป็นจำนวนขั้นต่ำของการเกิดขึ้นของค่าเดียวกัน(r0r1+n)modnสำหรับทุกคู่(r0,r1)ของสารตกค้างกำลังสอง modulo nn

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

ตกค้างกำลังสองแบบโมดูโล10เป็น0 , 1 , 4 , 5 , 6และ99

สำหรับแต่ละคู่(R0,R1)ของสารตกค้างสมการกำลังสองเราคำนวณ(R0-R1+10)พอควร10ซึ่งนำไปสู่ตารางต่อไปนี้ (โดยที่R0อยู่ด้านซ้ายและR1อยู่ด้านบน):

014569009654111076524430985554109666521079985430

จำนวนขั้นต่ำของค่าเดียวกันในตารางข้างต้นคือ (สำหรับ , ,และ ) ดังนั้น 222378a10=2

งานของคุณ

  • คุณอาจจะ:

    • รับจำนวนเต็มและพิมพ์หรือส่งกลับ (ดัชนี 0 หรือดัชนี 1)nan
    • รับจำนวนเต็มและพิมพ์หรือคืนค่าคำแรกของลำดับnn
    • ไม่มีการป้อนข้อมูลและพิมพ์ลำดับตลอดไป
  • รหัสของคุณจะต้องสามารถประมวลผล 50 ค่าแรกของลำดับในเวลาน้อยกว่า 1 นาที
  • ให้เวลาและหน่วยความจำเพียงพอรหัสของคุณจะต้องทำงานในเชิงทฤษฎีสำหรับจำนวนเต็มบวกใด ๆ ที่สนับสนุนโดยภาษาของคุณ
  • นี่คือรหัสกอล์ฟ

9
รับลำดับการเผยแพร่บน OEIS!
AdmBorkBork

@AdmBorkBork ขอบคุณ :) (ตามความเป็นจริงฉันมักจะหลีกเลี่ยงการโพสต์ลำดับ OEIS ตามที่เป็นความท้าทาย แต่ฉันเดาว่ามันก็โอเคสำหรับเรื่องนี้)
Arnauld

6
ไม่ไม่ได้+nภายใน(...)mod nไม่มีผลกระทบ? ถ้าเป็นเช่นนั้นมันแปลกมากที่เป็นส่วนหนึ่งของคำนิยาม
Jonathan Allan

3
@JanathanAllan ที่จริงแล้วฉันได้พูดคล้ายกันในฉบับร่างของลำดับและแนะนำว่ามันถูกลบออก แต่ฉันไม่พบฉันทามติที่ชัดเจนและฉันก็ไม่ได้รับคำติชมใด ๆ (และฉันดูเหมือนจะจำต้องเห็นลำดับอื่น ๆ ที่มี(some_potentially_negative_value + n) mod n.) ฉันคิดว่ามันจะดีกว่าที่จะมีในความท้าทายในการเขียนโปรแกรม แต่เนื่องจากสัญญาณของผลที่ได้ขึ้นอยู่กับภาษา
Arnauld

1
ฉันพยายามค้นหาสูตรโดยตรงโดยไม่ประสบความสำเร็จ ซีเควนซ์นั้นเป็นแบบทวีคูณและในจำนวนที่เท่ากันa_p = round(p/4)ซึ่งทำให้เรามีค่าสำหรับหมายเลข squarefree ทั้งหมด แต่สถานการณ์ดูเหมือนจะซับซ้อนในอำนาจของช่วงเวลาและกรณี 3 mod 4 และ 1 mod 4 จำเป็นต้องจัดการแยกต่างหาก
xnor

คำตอบ:



4

Japt -g , 22 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 ต้องขอบคุณเดนนิส (บังคับให้ใช้การแปลแบบดิดาดิคด้วยการนำð)
-2 มากขึ้นและต้องขอบคุณเดนนิส (เนื่องจากคู่อาจจะซ้ำซ้อนเราสามารถหลีกเลี่ยงRและ a 2)

ðp²%QI%ĠẈṂ

ลิงก์ monadic ยอมรับจำนวนเต็มบวกซึ่งให้ผลเป็นจำนวนเต็มไม่เป็นลบ

ลองออนไลน์! หรือดูคำศัพท์ 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¢

-2 ไบต์ขอบคุณ@Mr Xcoder

ลองมันออนไลน์หรือตรวจสอบครั้งแรก 99 กรณีทดสอบ (ประมาณ 3 วินาที) (หมายเหตุ: เวอร์ชันเก่าของ Python ใช้กับ TIO แทน Elixir ใหม่เขียนใหม่มันเร็วกว่าประมาณ 10 เท่า แต่ต้องการ trailing ¬(หัว) เพราะ.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¢. (ไม่ใช่แบบดั้งเดิมในเวอร์ชั่นใหม่)
Mr. Xcoder

@ Mr.Xcoder อาฉันเป็นคนงี่เง่าที่จะใช้แทนã.. >.> และไม่รู้ว่าการ.mกระทำที่แตกต่างในการเขียน Elixir ตอนแรกฉันมีเวอร์ชั่นใหม่แล้ว แต่เปลี่ยนเป็นรุ่นเก่าหลังจากที่ฉันสังเกตเห็น¥ว่าไม่ได้ทำงาน (ซึ่งคุณได้แก้ไขไว้Æ) ฉันยังคงใช้ระบบเดิมของ TIO อยู่แม้ว่าจะเร็วกว่าสำหรับความท้าทายนี้
Kevin Cruijssen

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 Cool; การประกาศจำนวนเต็มอื่นช่วยให้สามารถบันทึกไบต์อื่นได้จริง
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การใช้ประโยชน์

ขอบคุณ Cows นักต้มตุ๋นสำหรับ 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∘.-⍨, {≢⍵}⊢∘≢
user41805
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.