Score:0

ความซับซ้อนของการทดสอบเบื้องต้นของ Rabin-Miller

ธง lk

ฉันกำลังคิดถึงความซับซ้อนของการทดสอบเบื้องต้นของราบิน-มิลเลอร์ ในวิกิพีเดียฉันพบ O(k log3n) แต่ไม่มีคำอธิบาย ความคิดของฉันง่ายเกินไป ในการดูว่า n เป็นจำนวนเฉพาะหรือไม่ เรามี k ครั้ง และในแต่ละความพยายาม เราจะตรวจสอบว่าองค์ประกอบแรก b เป็น 1 หรือไม่ มิฉะนั้น เราจะมองหา -1 ในลำดับ b นี่ b = a^u mod n และ n-1 = 2^l * u, u คี่ กับ (b,b^2^1,b^2^2,b^2^3,...,b^ 2^(ล-1)). ดังนั้น ผมถือว่าสถานการณ์เลวร้ายกว่านั้น เราคำนวณจนถึงเลขชี้กำลังสุดท้าย ก่อนที่เราจะไปถึงระยะเฟอร์มาตส์-ไพรเมตเทสจริง ดังนั้นหากเราสามารถแทนค่า n-1 = 2^lu ด้วย u เป็นเลขคี่ เราก็ต้องมีขั้นตอนทั้งหมด k*(n-1)/(2u)

Score:1
ธง sa

ป้อนคำอธิบายรูปภาพที่นี่

โดยใช้การขยายเลขฐานสองของเลขยกกำลัง $t$ และคุณสามารถคำนวณกำลังสองซ้ำๆ ได้ $x^t$ โมดูโล $n$ กับ $O(\logn)$ โมดูโล $n$ การดำเนินการคูณ

และแต่ละโมดูโล $n$ การคูณและการหารจะใช้เวลา $O(\log^2 น)$ การดำเนินการจำนวนเต็ม จึงทำให้ $O(\log^3 น)$ การดำเนินการจำนวนเต็ม

เมื่อคุณมี $x^t$ โมดูโล $n,$ แล้ว $x^{2t},x^{4t},x^{2^st}$ โมดูโล $n$ สามารถรับได้โดย $s\leq \log_2 n$ การวนซ้ำของโมดูโลกำลังสองซ้ำๆ $n$.

การดำเนินการอื่น ๆ ทั้งหมดมีความซับซ้อนต่ำกว่า

หากคุณทำซ้ำ $k$ ครั้งเพื่อลดความน่าจะเป็นของข้อผิดพลาด คุณจะได้รับ $O(k \log^3 น).$

killertoge avatar
lk flag
ฉันเข้าใจว่าด้วยการขยายแบบไบนารี ฉันจะต้องมีการดำเนินการ O(log n) เพื่อรับ x^n เนื่องจากเราเป็นโมดูโล n การคูณแต่ละครั้งจะมีค่า O(log^2n) โอเค! เราทำ k พยายาม O(k log^3 n), ตกลง!. แต่เราไม่พยายามไปถึง a^(n-2) เนื่องจากการยกกำลังสองครั้งสุดท้ายจะเป็นการทดสอบไพรม์ของแฟร์มาต์ มันคือ O(k log^2 n log (n-2))?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา