क्या यह एक बहुपद का कारक है?


11

(x-n)यदि f(n)=0कार्य के लिए बहुपद एक कारक से विभाज्य है f। आपकी नौकरी: यह निर्धारित करने के लिए कि क्या एक बहुपद समारोह f(x)द्वारा विभाज्य है (x-n)

इनपुट

इनपुट के रूप में है (x-n), (Polynomial)याद रखें, यदि n ऋणात्मक है, (x-n)के इनपुट रूप में होगा(x+n) । बहुपद के लिए, सभी घातांक के रूप में डाला जाएगा ^। गुणांक को चर के बगल में लिखा जाएगा x। एक उदाहरण बहुपद हो सकता है 2x^2 + x^1। किसी भी चीज के बीच स्पेस नहीं होगा। इस शब्द xको इनपुट के रूप में लिया जाएगा x^1। तो क्या "सामान्य रूप से" की तरह लग रहे हैं (x - 1)हो जाएगा (x^1-1)। गुणांक और शक्तियां हमेशा पूर्णांक होंगी। गुणांक एक निहित होगा यदि यह सिर्फ है x। यानी, के xरूप में व्याख्या की जा सकती है1x

उत्पादन

एक बूलियन मान। सत्य, या मिथ्या।

@AlexA को धन्यवाद। मेरी मदद करने के लिए यह स्पष्ट करें!

उदाहरण

Input:(x^1-1),(x^1-1)
Output: True

Input: (x^1+2),(2x^2+4x^1+2)
Output: False

Input: (x^1+7),(x^2-49)
Output: True

नियम

दुर्भाग्य से, मुझे नहीं पता कि स्निपेट लीडरबोर्ड को कैसे लागू किया जाए। अगर किसी को पता है कि कैसे, पोस्ट को संपादित करने के लिए स्वतंत्र महसूस करें।


क्या इनपुट उस सटीक फॉर्म के साथ एक स्ट्रिंग होगा, यानी डिविज़न कैंडिडेट के चारों ओर परेंस, शून्य या एक स्पेस वाला कॉमा, और पॉलीनॉमियल के चारों ओर परेंस?
एलेक्स ए।


निश्चित रूप से उस की नकल नहीं है।
इंटबूलस्ट्रिंग

@intrepidcoder यह डुप्लिकेट नहीं है क्योंकि प्रश्न एक बहुपद का कारक नहीं है। यह देखना है कि क्या एक बहुपद को एक रैखिक कारक द्वारा विभाजित किया जा सकता है।
intboolstring

क्या बहुपद गुणांक हमेशा पूर्णांक होगा?
डिजिटल ट्रॉमा

जवाबों:


5

पायथ - 39 बाइट्स

यह regexp और eval का एक राक्षसी संयोजन है। मुझे दृष्टिकोण पसंद है, लेकिन कार्यान्वयन में सुधार करने की कोशिश करेंगे।

यह बहुपद रेमिनेडर प्रमेय का उपयोग करता है ।

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

Eval उपयोग के कारण ऑनलाइन काम नहीं करता है।


3

कैसियो बेसिक, 19 बाइट्स

judge(mod(b,a)=0

जैसा कि यह पता चला है, एफएक्स-सीपी 400 modबीजीय अभिव्यक्तियों पर कर सकता है !

बहुपद और कारक को भाव के रूप में दर्ज किया जाना चाहिए। कोड के लिए 16 बाइट्स, 3 बाइट्स a,bपैरामीटर मान बॉक्स में दर्ज करने के लिए।


1

MATLAB, 103 99 97 97 93 बाइट्स

मैं कुछ अलग चीजों की कोशिश कर रहा हूं, और यह कुछ बाइट्स को बचाने के लिए काम करने के लिए मिला है:

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

अगर मैं आगे भी इसे कम कर सकता हूं, तो मैं एक स्पष्टीकरण पोस्ट करूंगा।


पुराना कोड एक स्पष्टीकरण

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

यह ऑक्टेव के साथ भी काम करता है । आप इसे ऑनलाइन आज़मा सकते हैं । मैंने प्रोग्राम को नाम की स्क्रिप्ट के रूप में सहेजा है isFactor.m, इसलिए आप बस isFactorप्रॉम्प्ट पर दर्ज कर सकते हैं । [नोट: ऑक्टेव में दौड़ते समय एक चेतावनी दी जाती है - MATLAB इसे उत्पन्न नहीं करता है]।

इनपुट '(x^1+7),(x^2-49)'प्रश्न के अनुसार प्रारूप में होना चाहिए । उद्धरण चिह्नों को जोड़ा जाता है ताकि MATLAB / ऑक्टेव को पता चले कि यह एक स्ट्रिंग है।

उत्पादन या तो एक है 0या एक 1या नहीं, के आधार पर यह सही या गलत है।


तो, कोड निम्नानुसार काम करता है। पहले हम एक इनपुट का अनुरोध करते हैं, और फिर इसे पार्स करते हैं। पार्सिंग स्ट्रिंग स्ट्रिंग में पहले के बाद हस्ताक्षरित संख्या को निकालता है (x^1- यह हमारा मूल्य है n। फिर यह इनपुट के %sबाद स्ट्रिंग ( ) को निकालना जारी रखता है ),- यह हमारी अभिव्यक्ति है।

t=sscanf(input(''),'(x^1%d),%s')';

इसके बाद, हम उसके मान को निकालते हैं nऔर xउसके बराबर सेट करते हैं - हम मूल्यांकन करने जा रहे हैं कि क्या अभिव्यक्ति शून्य के बराबर है n==x, इसलिए यही कारण है कि हम मान को x में संग्रहीत करते हैं। पार्स करते समय माइनस साइन की वजह से भी हम निकाले गए नंबर को नकार देते हैं।

x=-t(1);

हम तब आउटपुट प्रदर्शित करेंगे जो बूलियन है

disp(

आउटपुट मूल रूप से हमारे मूल्यांकन समीकरण का तार्किक निषेध है। यदि f(x)शून्य है, तो यह 1 लौटेगा, अन्यथा इसका परिणाम शून्य होगा।

     ~eval(

हम इनपुट अभिव्यक्ति का मूल्यांकन कर रहे हैं, लेकिन ऐसा करने के लिए, हमें इसे थोड़ा सुधारना होगा ताकि MATLAB समझ सके। जब हम स्ट्रिंग पढ़ते हैं, तो यह वास्तव में एक प्रकार की सरणी होती है double, इसलिए हमें इसे एक वर्ण सरणी में बदलने की आवश्यकता है। रूपांतरण से पहले हम पहले तत्व से भी छुटकारा पा लेते हैं जैसा कि हमने इस्तेमाल किया था n। हमें तब किसी भी घटना को प्रतिस्थापित करने की आवश्यकता होती है xजो एक संख्या (उदाहरण 4x) से एक ही चीज़ से पहले होती है, लेकिन *MATLAB के बीच गुणा ( ) चिह्न के साथ यह गणना कर सकता है।

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)

1

वीबीएसस्क्रिप्ट, 118 116 बाइट्स

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

चूंकि हम जानते हैं कि इनपुट का पहला भाग एक रैखिक बहुपद है, हमें केवल यह जांचने की आवश्यकता है कि इसकी जड़ दूसरी बहुपद से मेल खाती है या नहीं; और हम के लिए शब्द तैयार करने की आवश्यकता evalडालने से *के रूप में की जरूरत है।


1

Axiom 77 180 बाइट्स

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

पिछले समाधान

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

गलत था क्योंकि यह डिग्री (बी)> = डिग्री (ए) एक बग मैंने लिखा था ... परीक्षण और परिणाम

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.