सिद्ध कीजिए कि एक संख्या बीजगणितीय है


10

इस उत्तर से प्रेरित (जोर मेरा):

हम एक खेल खेलेंगे। मान लीजिए कि आपके पास कुछ संख्या x है । आप x से शुरू करते हैं और फिर आप शून्य को छोड़कर किसी भी पूर्णांक से जोड़, घटा, गुणा या भाग कर सकते हैं। आप x से गुणा भी कर सकते हैं । आप इन चीजों को जितनी बार चाहें कर सकते हैं। यदि कुल शून्य हो जाता है, तो आप जीतते हैं।

उदाहरण के लिए, मान लीजिए कि x 2/3 है। 3 से गुणा करें, फिर घटाएं 2. परिणाम शून्य है। तुम जीते!

मान लीजिए कि x 7 ^ (1/3) है। एक्स से गुणा करें , फिर एक्स द्वारा फिर, फिर घटाएं 7. आप जीत गए!

मान लीजिए कि x ose2 + √3 है। यहां यह देखना आसान नहीं है कि कैसे जीतें। लेकिन यह पता चला है कि यदि आप x से गुणा करते हैं , 10 घटाते हैं, x से दो बार गुणा करते हैं , और 1 जोड़ते हैं, तो आप जीत जाते हैं। (यह स्पष्ट नहीं माना जाता है; आप इसे अपने कैलकुलेटर के साथ आज़मा सकते हैं।)

लेकिन अगर आप x = x से शुरू करते हैं , तो आप जीत नहीं सकते। यदि आप जोड़ते हैं, घटाते हैं, गुणा करते हैं, या पूर्णांकों द्वारा विभाजित करते हैं, या multip से गुणा करते हैं, तो कोई भी तरीका नहीं है, चाहे आप कितने भी कदम उठाएं। (यह भी स्पष्ट नहीं माना जाता है। यह बहुत मुश्किल काम है!)

2 + from3 जैसी संख्याएँ जिनसे आप जीत सकते हैं, बीजगणितीय कहलाते हैं । जैसी संख्याएँ जिसके साथ आप नहीं जीत सकते हैं, ट्रान्सेंडैंटल कहलाते हैं।

यह दिलचस्प क्यों है? प्रत्येक बीजीय संख्या पूर्णांकों से अंकगणित से संबंधित है, और गेम में जीतने वाली चाल आपको दिखाती है कि कैसे। शून्य का रास्ता लंबा और जटिल हो सकता है, लेकिन प्रत्येक चरण सरल है और एक रास्ता है। लेकिन ट्रान्सेंडैंटल संख्याएं मौलिक रूप से भिन्न होती हैं: वे अंकगणित से सरल चरणों के माध्यम से संबंधित नहीं हैं।


अनिवार्य रूप से, आप दिए गए इनपुट के लिए गेम "जीतने" के लिए ऊपर दिए गए प्रश्न में उपयोग किए गए चरणों का उपयोग करेंगे।

एक वास्तविक, बीजीय स्थिरांक को देखते हुए, xनिम्नलिखित अनुमत कार्यों का उपयोग करके संख्या को शून्य में परिवर्तित करें:

  • पूर्णांक जोड़ना या घटाना।
  • एक गैर-शून्य पूर्णांक द्वारा गुणा या विभाजित करें।
  • मूल स्थिरांक से गुणा करें x

इनपुट एक स्ट्रिंग है पूर्णांकों, इसके अलावा, घटाव, गुणा, विभाजन, घातांक (अपनी पसंद हो सकती है है **या ^, एक्स्पोनेंट्स जड़ों का प्रतिनिधित्व करने के लिए उपयोग किया जाता), और कोष्ठक। इनपुट में स्पेस वैकल्पिक हैं, लेकिन आउटपुट में नहीं। आपको शून्य का परिणाम प्राप्त करने के लिए आवश्यक चरणों का उत्पादन करना चाहिए, इसलिए 7एक कदम से गुणा करना आउटपुट के रूप में होगा *7। एक अनुगामी स्थान और / या न्यूलाइन की अनुमति है।

उदाहरण

0               ->  +0 (or any other valid, or empty)
5/7 + 42        ->  -42 *7 -5 (or shorter: *7 -299)
2^(1/3)         ->  *x *x -2
5*(3**(1/4))    ->  *x *x *x -1875
2^(1/2)+3^(1/2) ->  *x -10 *x *x +1

सबसे छोटा कोड जीतता है।


0परिणाम के कितने करीब होने की आवश्यकता है? राउंडिंग एरर और फ्लोट
प्रिसिजन

2
@TimmyD जवाब सटीक होना चाहिए, जैसे कि मैं संचालन कर सकता हूं और शून्य प्राप्त कर सकता हूं। दिए गए उदाहरण देखें। कोई अस्थायी बिंदु अंकगणित नहीं है।
mbomb007

1
Ic2 + al3 बीजगणितीय कैसे है? यदि आप संख्या को अपने आप से गुणा करते हैं तो आपको 5 + 2 ...6 मिलता है ... जब तक कि मैं कुछ याद नहीं कर रहा हूँ आप कभी भी कट्टरपंथी को मजबूर नहीं कर सकते।
मारियो इश

@ mbomb007 वूप्स, मेरी माफी, कि ओपी में पकड़ नहीं था।
मारियो इश

1
यह समीकरण का हल है x^4-10*x^2+1वुल्फरामअल्फा
mbomb007

जवाबों:


3

सेजमैथ , 108 बाइट्स

def f(s):p=map('{:+} '.format,numerator(minpoly(sage_eval(s)/1)));return'*'+p[-1][1:]+'*x '.join(p[-2::-1])

इसे SageMathCell पर आज़माएं

स्पष्टीकरण:

एक बीजगणितीय संख्या ( sage_eval()) के रूप में प्रतीकात्मक रूप से स्ट्रिंग का मूल्यांकन करें । प्रत्येक बीजगणितीय संख्या कुछ बहुपद का शून्य है [0] + [ a ] 1 ^ x ^ 1 + a [2] x ^ 2 + ⋯ + [ a ] [n] x ^ n परिमेय गुणांक वाले [0],…, a [ एन ] ( minpoly())। सभी सामान्य गुणकों को उनके पूर्णांक से पूर्णांक में बदलने के लिए गुणा करें ( numerator()), फिर इस बहुपद को वांछित आउटपुट स्वरूप में लिखें,

*a[n] +a[n-1] *x +a[n-2] *x … *x +a[1] *x +a[0]

सेजमैथ, 102 बाइट्स, लगभग

lambda s:(lambda a,*p:'*%d'%a+'*x'.join(map(' {:+} '.format,p)))(*numerator(minpoly(1/sage_eval(s))))

यह 0 को छोड़कर सभी इनपुट्स के लिए काम करता है , क्योंकि 1 / α के लिए एक बहुपद α बहुपद के साथ गुणांक के साथ एक बहुपद है। :-(


1

मेथेमेटिका, 194 224 192 बाइट्स

""<>Cases[HornerForm@MinimalPolynomial[ToExpression@#,x]//.{Times->t,x^a_:>Fold[#2~t~#&,x~Table~a],a_~t~b_~t~c_:>a~t~t[b,c]},a_~b_~_:>{b/.t:>"*"/.Plus:>If[a>0,"+",""],ToString@a," "},{0,∞}]&

यहाँ तीन बाइट यूनिकोड चरित्र है जो गणितज्ञों में अनंतता का प्रतिनिधित्व करता है।

चूंकि इनपुट एक स्ट्रिंग है, 13 बाइट्स खो गए हैं, ToExpression@जिस पर स्ट्रिंग इनपुट को बीजीय अभिव्यक्ति के रूप में व्याख्या करता है।

HornerForm@MinimalPolynomial[2^(1/2)+3^(1/2), x]

कुछ लौटना चाहेंगे

1 + x^2 (-10 + x^2)

अगला प्रतिस्थापन नियम कुछ इस तरह से मालिश करता है जो संरचनात्मक रूप से पसंद है

1 + (x * (x * (-10 + (x * (x)))))

इस सींग के रूप को पेड़ की तरह देखा जा सकता है:

TreeForm

हम, ओपी के नियमों द्वारा सही पर सबसे गहरी पत्ती से शुरू करते हैं।

Cases अभिव्यक्ति के माध्यम से जाता है, सबसे गहरे स्तर पर शुरू होता है, प्रत्येक माता-पिता के नोड और उसके बाएं पत्ती को लेते हुए और इसे एक तालिका में इस तरह से इकट्ठा किया जाता है

"*" "x"   " "
""  "-10" " "
"*" "x"   " "
"*" "x"   " "
"+" "1"   " "

""<> खाली स्ट्रिंग के साथ सब कुछ समेटता है।


यह गलत तरीके से रिटर्न -299के लिए 5/7 + 42
एंडर्स कासोर्ग

@ और तो यह * 7 को छोड़ देता है ... मैं एक बार घर
लौटने पर

@AndersKaseorg यह काम करता है, लेकिन अब मैं 30 बाइट्स नीचे हूं।
LLLAMnYP
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.