อัลกอริทึมใดที่เราสามารถใช้เพื่อค้นหารากจำนวนเต็มทั้งหมดของพหุนามด้วยสัมประสิทธิ์จำนวนเต็ม?
ฉันสังเกตว่า Sage สามารถค้นหารากภายในไม่กี่วินาทีแม้ว่าค่าสัมประสิทธิ์ทั้งหมดจะมีขนาดใหญ่มาก จะทำเช่นนั้นได้อย่างไร
อัลกอริทึมใดที่เราสามารถใช้เพื่อค้นหารากจำนวนเต็มทั้งหมดของพหุนามด้วยสัมประสิทธิ์จำนวนเต็ม?
ฉันสังเกตว่า Sage สามารถค้นหารากภายในไม่กี่วินาทีแม้ว่าค่าสัมประสิทธิ์ทั้งหมดจะมีขนาดใหญ่มาก จะทำเช่นนั้นได้อย่างไร
คำตอบ:
สมมติว่าสัมประสิทธิ์ของเป็นจำนวนเต็มหรือ rationals และคุณต้องการรากจำนวนเต็มวิธีที่ง่ายที่สุดคือการใช้ทฤษฎีบทเลขจำนวนเต็มหรือเหตุผลแบบราก ดูhttp://en.wikipedia.org/wiki/Rational_root_theorem ตามที่ระบุไว้โดย DW นี่อาจเป็นปัญหาหากค่าสัมประสิทธิ์คงที่นั้นยากที่จะแยกปัจจัย (ดู/math/123018/polynomial- และจำนวนเต็ม )
ไม่ว่าในกรณีใดเอกสาร Sage อธิบายอย่างชัดเจนว่าพวกเขาทำการค้นหารูทอย่างไร: "วิธีการถัดไปซึ่งใช้ถ้า K เป็นโดเมนที่สำคัญคือพยายามที่จะแยกตัวประกอบพหุนามหากทำได้สำเร็จทุกระดับหนึ่ง ตัวคูณ a * x + b เราเพิ่ม -b / a เป็นรูท (ตราบใดที่ความฉลาดนี้อยู่ในวงแหวนที่ต้องการ) " ดูhttp://www.sagemath.org/doc/reference/polynomial_rings/sage/rings/polynomial/polynomial_element.html
ดังนั้นคำถามของคุณจะกลายเป็นอย่างไรพวกเขาทำการแยกพหุนามกับสัมประสิทธิ์จำนวนเต็มอย่างมีประสิทธิภาพได้อย่างไร เห็นได้ชัดว่า Sage กำลังเรียก NTL ให้ทำเช่นนั้น (ดูhttp://www.shoup.net/ntl/doc/ZZXFactoring.txtสำหรับรายละเอียดของ NTL)
หากคุณต้องการวิธีที่มีประสิทธิภาพแบบ asymptotically คุณสามารถอ้างถึงวิธีของ Lenstra, Lenstra และ Lovasz ( https://openaccess.leidenuniv.nl/handle/1887/3810 )