एक परिमित क्षेत्र या पूर्णांकों पर एक बहुपद का गुणनखंड


20

किसी भी अंतर्निहित फैक्टरिंग / बहुपद कार्यों का उपयोग किए बिना, पूर्णांक या एक परिमित क्षेत्र पर पूरी तरह से irreducibles में एक बहुपद का कारक।

इनपुट

आपके प्रोग्राम / फ़ंक्शन nको इनपुट के रूप में कुछ प्राइम (या शून्य) नंबर प्राप्त होंगे । क्षेत्र / अंगूठी है कि आदेश (यानी के परिमित क्षेत्र है Z/nZ), या बस Zयदि nहै 0। आपका प्रोग्राम विफल हो सकता है अगर कोई प्राइम है या nनहीं 0। बहुपद में होगा F[x]

आपके कार्यक्रम / फ़ंक्शन को इनपुट के रूप में बहुपद भी प्राप्त होगा।

इनपुट में कुछ लचीलापन है, यह निर्दिष्ट करना सुनिश्चित करें कि आप इनपुट प्राप्त करने का इरादा रखते हैं। उदाहरण के लिए, बहुपद गुणांक की एक सूची के रूप में इनपुट हो सकता है, या जिस रूप में अधिकांश लोग अपेक्षा करते हैं (पूर्व:) 50x^3 + x^2, या कुछ अन्य उचित रूप में। या फ़ील्ड / रिंग को इनपुट करने का प्रारूप भी भिन्न हो सकता है।

उत्पादन

आपका कार्यक्रम / समारोह पूरी तरह से बहुपद फैक्टर का उत्पादन करेगा। आप कई जड़ों को विस्तारित (यानी के (x + 1)(x + 1)बजाय (x + 1)^2) छोड़ सकते हैं । आप बाइनरी ऑपरेटरों के बीच व्हाट्सएप को हटा सकते हैं। आप के साथ juxtaposition बदल सकते हैं *। आप अजीब जगहों पर व्हॉट्सएप डाल सकते हैं। आप जो भी आदेश चाहते हैं उसमें कारकों को फिर से दर्ज कर सकते हैं। xअवधि सिर्फ हो सकता है (x)xके रूप में लिखा जा सकता है x^1; हालांकि निरंतर अवधि नहीं हो सकती है x^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
मुझे लगता है कि यह मुझे कुछ कठिन स्नातक गणित के लिए एक फ्लैशबैक दे रहा है । क्या मैं भी यहाँ सही दिशा में जा रहा हूँ?
डिजिटल ट्रामा

1
यह मुझे उस समय की याद दिलाता है, जब मेरे पास बुरे सपने थे जो कि बहुपदों को सही ढंग से प्रिंट करने की कोशिश कर रहे थे ...
Sp3000

क्षमा करें कि मुझे समझ नहीं आया, लेकिन पहला इनपुट नंबर क्या करना है? या यह आउटपुट को कैसे प्रभावित करता है?
ऑप्टिमाइज़र

@Optimizer पहला इनपुट नंबर निर्धारित करता है कि आप किस क्षेत्र / पूर्णांक पर काम कर रहे हैं। यदि संख्या नॉनज़रो है, तो आप उस क्रम के परिमित क्षेत्र पर काम कर रहे हैं। ऑर्डर के एक परिमित क्षेत्र में pतत्व होते हैं {0, 1, ... , p-1}और यह जोड़ / गुणा मॉड के तहत होता है p। मूल रूप से, मॉड द्वारा किसी भी गुणांक को कम करें pऔर आप अच्छे हैं। यह भी ध्यान दें कि यदि इसका मूल यानी रैखिक कारक है, तो बहुपद में प्लग करने पर इसका एक (मॉड ) {0, ... , p-1}उत्पादन होगा । 0p
जस्टिन

1
@flawr, फैक्टरिंग के लिए मानक दृष्टिकोण एक उपयुक्त और फिर हेन्सेल लिफ्ट के Zलिए फैक्टर ओवर है । हालांकि, गोल्फ का दृष्टिकोण संभवतः (और यह निश्चित रूप से वह मार्ग है जिसे मैं देख रहा हूं) कारकों की ऊंचाई पर एक साधारण बाउंड का उपयोग करने के लिए और इसे बल देने के लिए। Z/pZp
पीटर टेलर

जवाबों:


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गुणांक के एक गोल्फस्क्रिप्ट सरणी के बाद सबसे कम से कम महत्वपूर्ण है। जैसे 0, x^5 + 5x^3 + x^2 + 4x + 1स्वरूपित किया जाना चाहिए 0 [1 0 5 1 4 1]
  2. एक परिमित क्षेत्र में, प्रासंगिक होने के लिए पर्याप्त रूप से छोटी डिग्री के केवल बहुत से बहुपद हैं। हालाँकि, यह मामला खत्म नहीं हुआ है Z। मैं ZMignotte की ऊँचाई से बंधे एक सुकून के रूप में काम करता हूँ। फैक्टरिंग में ऊँचाई सीमा पर एक बड़ा पेपर जेड [x] , जॉन एबॉट, 2009 में फैक्टर्स पर सीमा है (लिंक arxiv छाप के लिए है; उनके सीवी का कहना है कि यह सांकेतिक गणना के जर्नल द्वारा स्वीकार किया गया है )। वहां दिया गया सबसे सुकून भरा रूप एल -2 मानक के संदर्भ में है, लेकिन बाइट्स को बचाने के लिए मैं आगे आराम करता हूं और इसके बजाय एल -1 मानक का उपयोग करता हूं। फिर यह ट्रायल डिवीजन द्वारा ब्रूट फोर्सिंग का मामला है।
  3. एक परिमित क्षेत्र पर, प्रत्येक बहुपद एक निरंतर बहुपद होता है, इसलिए मैं केवल राक्षसी बहुपद द्वारा परीक्षण विभाजन करता हूं और क्षेत्र में एक पारस्परिक परिवर्तन को बचाता हूं। हालांकि, Zकेवल एक अंगूठी है और इसलिए गैर-मोनिक उम्मीदवार कारकों द्वारा परीक्षण विभाजन करना आवश्यक है। मैं एक प्रमुख कारक विभाजन परीक्षण करके और "त्रुटि" ध्वज को जमा करके तर्कसंगत संख्याओं को लागू नहीं करने के साथ दूर जाने का प्रबंधन करता हूं e
  4. दोनों अंक 2 और 3 का अर्थ है कि फैक्टरिंग का मामला Zआम तौर पर धीमा है, और ऑनलाइन डेमो के साथ परीक्षण नहीं किया जा सकता है। हालांकि, आधिकारिक परीक्षण के मामलों में सबसे धीमा 10 मिनट लगते हैं, जो "उचित" समय सीमा के भीतर है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.