ตัวประกอบพหุนามเหนือสนาม จำกัด หรือจำนวนเต็ม


20

โดยไม่ต้องใช้ฟังก์ชันแฟคตอริ่ง / พหุนามใด ๆ ในตัวปัจจัยพหุนามสมบูรณ์เป็น irreducibles เหนือจำนวนเต็มหรือเขต จำกัด

อินพุต

โปรแกรม / ฟังก์ชั่นของคุณจะได้รับหมายเลขเฉพาะ (หรือศูนย์) จำนวนหนึ่งnเป็นอินพุต สนาม / แหวนเป็นฟิลด์ จำกัด ของการสั่งซื้อที่ (เช่นZ/nZ) หรือเพียงแค่Zถ้ามีn 0โปรแกรมของคุณอาจล้มเหลวหากnไม่ใช่0หรือเป็นตัวเฉพาะ F[x]พหุนามจะอยู่ใน

โปรแกรม / ฟังก์ชั่นของคุณจะได้รับพหุนามเป็นอินพุต

มีความยืดหยุ่นในการป้อนข้อมูลให้แน่ใจว่าได้ระบุวิธีที่คุณต้องการรับอินพุต ตัวอย่างเช่นพหุนามสามารถป้อนเป็นรายการของค่าสัมประสิทธิ์หรือในรูปแบบที่คนส่วนใหญ่คาดหวัง (เช่น:) 50x^3 + x^2หรือรูปแบบที่เหมาะสมอื่น ๆ หรือรูปแบบของการป้อนสนาม / แหวนอาจแตกต่างกัน

เอาท์พุต

โปรแกรม / ฟังก์ชั่นของคุณจะเอาท์พุทพหุนามสมบูรณ์ คุณอาจขยายหลายราก (เช่น(x + 1)(x + 1)แทน(x + 1)^2) คุณสามารถลบช่องว่างระหว่างตัวดำเนินการไบนารี *คุณอาจจะแทนที่ด้วยการตีข่าว คุณสามารถแทรกช่องว่างในสถานที่แปลก ๆ คุณสามารถจัดลำดับปัจจัยต่าง ๆ ตามที่คุณต้องการ ระยะก็อาจจะx สามารถเขียนเป็น; แต่ระยะคงที่อาจจะไม่ได้มี สัญญาณภายนอกนั้นอนุญาตให้ทำได้ คุณอาจไม่มีคำศัพท์ที่อยู่ข้างหน้าพวกเขาจะต้องถูกทิ้งไว้ คำที่เป็นผู้นำของแต่ละปัจจัยจะต้องเป็นบวกสัญญาณเชิงลบจะต้องอยู่นอก(x)xx^1x^0+0

กรณีทดสอบโปรแกรมของคุณควรสามารถสร้างผลลัพธ์สำหรับแต่ละสิ่งเหล่านี้ในเวลาที่เหมาะสม (พูด <<2 ชั่วโมง):

การป้อนข้อมูล: 2, x^3 + x^2 + x + 1

เอาท์พุท: (x + 1)^3

การป้อนข้อมูล: 0, x^3 + x^2 + x + 1

เอาท์พุท: (x + 1)(x^2 + 1)

การป้อนข้อมูล: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30

เอาท์พุท: (3x + 2)(2x - 5)(x^2 + 3)

การป้อนข้อมูล: 5, x^4 + 4x^3 + 4x^2 + x

เอาท์พุท: x(x + 4)(x + 4)(x + 1)

การป้อนข้อมูล: 0, x^5 + 5x^3 + x^2 + 4x + 1

เอาท์พุท: (x^3 + 4x + 1)(x^2 + 1)

ขอขอบคุณเป็นพิเศษกับปีเตอร์เทย์เลอร์ที่วิจารณ์การทดสอบของฉัน


1
ฉันคิดว่านี้จะให้ฉันย้อนหลังบางส่วนของคณิตศาสตร์ในระดับปริญญาตรียาก ฉันกำลังมุ่งหน้าไปในทิศทางที่ถูกต้องที่นี่หรือไม่?
Digital Trauma

1
สิ่งนี้ทำให้ฉันนึกถึงเวลาที่ฉันมีฝันร้ายที่พยายามพิมพ์พหุนามอย่างถูกต้อง ...
Sp3000

ขออภัยที่ฉันไม่เข้าใจ แต่หมายเลขอินพุตแรกที่ควรทำคืออะไร หรือมันมีผลต่อการส่งออกอย่างไร
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer หมายเลขอินพุตแรกกำหนดฟิลด์ / จำนวนเต็มที่คุณกำลังทำงาน หากตัวเลขไม่ใช่ศูนย์คุณกำลังทำงานในฟิลด์ จำกัด ของคำสั่งนั้น ฟิลด์ จำกัด ของการสั่งซื้อpมีองค์ประกอบ{0, 1, ... , p-1}และมันก็อยู่ภายใต้นอกจาก / pคูณพอควร โดยทั่วไปลดสัมประสิทธิ์ใด ๆ ตาม mod pและคุณก็ทำได้ดี นอกจากนี้โปรดทราบว่าหากมีรากเช่นตัวประกอบเชิงเส้นหนึ่งใน{0, ... , p-1}นั้นจะสร้าง0(mod p) เมื่อเสียบเข้ากับพหุนาม
Justin

1
@flawr แนวทางมาตรฐานในการแฟกว่าZเป็นปัจจัยมากกว่าZ/pZสำหรับเหมาะpลิฟท์แล้ว Hensel อย่างไรก็ตามวิธีการตีกอล์ฟนั้นน่าจะเป็น (และนี่คือเส้นทางที่ฉันกำลังมองหาอยู่) เพื่อใช้ขอบเขตที่เรียบง่ายกับความสูงของปัจจัยและดุร้ายบังคับมัน
Peter Taylor

คำตอบ:


17

GolfScript (222 ไบต์)

~.@:q@.0\{abs+}/2@,2/)?*or:^{\1$^base{^q- 2/-}%.0=1=1$0=q>+{{:D[1$.,2$,-)0:e;{.0=0D=%e|:e;(D(@\/:x@@[{x*~)}%\]zip{{+}*q!!{q%}*}%}*e+])0-{;0}{@;@\D.}if}do}*;\).^3$,)2/?<}do;][[1]]-{'('\.,:x;{.`'+'\+'x^'x(:x+x!!*+\!!*}%')'}/

การสาธิตออนไลน์

หมายเหตุ

  1. รูปแบบอินพุตnตามด้วยค่าสัมประสิทธิ์อาเรย์ของ GolfScript จากมากไปหาน้อยที่สุด เช่นควรจะจัดรูปแบบเป็น0, x^5 + 5x^3 + x^2 + 4x + 10 [1 0 5 1 4 1]
  2. เหนือสนาม จำกัด มีเพียงชื่อพหุนามจำนวนมากที่มีขนาดเล็กพอที่จะเกี่ยวข้อง Zแต่นี้เป็นกรณีที่ไม่มากกว่า ฉันจัดการZโดยใช้รูปแบบที่ผ่อนคลายของความสูงของ Mignotte บทความยอดเยี่ยมเกี่ยวกับขอบเขตความสูงของแฟคตอริ่งคือขอบเขตของปัจจัยใน Z [x] , John Abbott, 2009 (ลิงก์คือ to arxiv preprint; CV ของเขากล่าวว่าได้รับการยอมรับจากวารสารการคำนวณสัญลักษณ์ ) รูปแบบที่ผ่อนคลายที่สุดที่ให้ไว้คือในรูปแบบของบรรทัดฐาน L-2 แต่เพื่อประหยัดไบต์ฉันผ่อนคลายมากขึ้นและใช้บรรทัดฐาน L-1 แทน ถ้าอย่างนั้นมันก็เป็นเรื่องของการบังคับสัตว์เดรัจฉาน
  3. เหนือสนาม จำกัด , พหุนามทุกอันมีค่าคงที่เป็นพหุนาม monic, ดังนั้นฉันจะแบ่งการทดลองโดยพหุนาม monic เท่านั้นและบันทึกส่วนกลับในสนาม อย่างไรก็ตามZเป็นเพียงวงแหวนดังนั้นจึงจำเป็นต้องทำการแบ่งทดลองโดยปัจจัยผู้สมัครที่ไม่ใช่โมโน ฉันจัดการได้รับไปกับการดำเนินการไม่ได้สรุปตัวเลขด้วยการทำทดสอบชั้นนำส่วนปัจจัยและสะสมข้อผิดพลาด "ธง" eใน
  4. ทั้งสองประเด็นที่ 2 และ 3 บ่งบอกว่ากรณีของการรับช่วงต่อZโดยทั่วไปช้ากว่าและไม่สามารถทดสอบด้วยการสาธิตออนไลน์ อย่างไรก็ตามการทดสอบที่ช้าที่สุดของกรณีทดสอบอย่างเป็นทางการใช้เวลา 10 นาทีซึ่งอยู่ในช่วงเวลาที่ "สมเหตุสมผล"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.