พิสูจน์ว่าตัวเลขเป็นพีชคณิต


10

ได้รับแรงบันดาลใจจากคำตอบนี้ (เหมืองที่เน้น):

เราจะเล่นเกม สมมติว่าคุณมีบางหมายเลขx คุณเริ่มต้นด้วยxจากนั้นคุณสามารถเพิ่ม, ลบ, คูณหรือหารด้วยจำนวนเต็มใด ๆ ยกเว้นศูนย์ คุณยังสามารถคูณด้วยx คุณสามารถทำสิ่งเหล่านี้ได้หลายครั้งตามที่คุณต้องการ หากผลรวมกลายเป็นศูนย์คุณจะชนะ

ตัวอย่างเช่นสมมติว่าxคือ 2/3 คูณด้วย 3 แล้วลบ 2 ผลลัพธ์ที่ได้คือศูนย์ คุณชนะ!

สมมติว่าxคือ 7 ^ (1/3) คูณด้วยxแล้วโดยxอีกครั้งแล้วลบ 7 คุณชนะ!

สมมติว่าxคือ√2 + √3 ที่นี่ไม่ใช่เรื่องง่ายที่จะเห็นว่าจะชนะอย่างไร แต่ปรากฎว่าถ้าคุณคูณด้วยx , ลบ 10, คูณด้วยxสองครั้งแล้วบวก 1 คุณจะชนะ (สิ่งนี้ไม่ควรชัดเจน; คุณสามารถลองกับเครื่องคิดเลขได้)

แต่ถ้าคุณเริ่มต้นด้วยx = πคุณจะไม่สามารถชนะได้ ไม่มีวิธีรับจากπถึง 0 หากคุณเพิ่มลบคูณหรือหารด้วยจำนวนเต็มหรือคูณด้วยπไม่ว่าคุณจะทำตามขั้นตอนจำนวนเท่าใดก็ตาม (สิ่งนี้ไม่ควรจะชัดเจนเช่นกันมันเป็นสิ่งที่ยุ่งยากมาก!)

ตัวเลขเช่น√2 + √3จากการที่คุณสามารถชนะจะเรียกว่าพีชคณิต ตัวเลขเช่นπซึ่งคุณไม่สามารถชนะได้จะเรียกว่ายอดเยี่ยม

ทำไมเรื่องนี้ถึงน่าสนใจ? หมายเลขพีชคณิตแต่ละหมายเลขนั้นมีความสัมพันธ์ทางคณิตศาสตร์กับจำนวนเต็มและการเคลื่อนไหวที่ชนะในเกมจะแสดงให้คุณเห็นว่าเป็นเช่นไร เส้นทางสู่ศูนย์อาจมีความยาวและซับซ้อน แต่แต่ละขั้นตอนนั้นง่ายและมีเส้นทาง แต่ตัวเลขยอดเยี่ยมมีความแตกต่างกันโดยพื้นฐาน: พวกมันไม่ได้เกี่ยวข้องกับเลขจำนวนเต็มผ่านขั้นตอนง่าย ๆ


เป็นหลักคุณจะใช้ขั้นตอนที่ใช้ในคำถามที่ยกมาด้านบนเพื่อ "ชนะ" เกมสำหรับการป้อนข้อมูลที่กำหนด

กำหนดค่าคงที่พีชคณิตจริงให้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ผลลัพธ์จะใกล้เคียงกันมากแค่ไหน? เมื่อได้รับข้อผิดพลาดในการปัดเศษและความแม่นยำในการลอยฉันสามารถเห็นสถานการณ์ที่เป็นปัญหาได้อย่างง่ายดาย ...
AdmBorkBork

2
@ TimmyD คำตอบจะต้องตรงกับที่ฉันสามารถดำเนินการและได้รับศูนย์ ดูตัวอย่างที่มีให้ ไม่มีเลขทศนิยมใด ๆ
mbomb007

1
พีชคณิต√2 + √3เป็นอย่างไร ถ้าคุณคูณจำนวนด้วยตัวเองคุณจะได้ 5 + 2√6 ... นอกเสียจากว่าฉันจะพลาดบางสิ่งบางอย่างคุณก็ไม่สามารถบังคับความรุนแรงได้
Mario Ishac

@ mbomb007 ขออภัยฉันไม่ได้รู้เรื่องนั้นใน OP
Mario Ishac

1
x^4-10*x^2+1มันเป็นวิธีการแก้สมการ ดูWolframAlpha
mbomb007

คำตอบ:


3

SageMath , 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()) จำนวนพีชคณิตทุกตัวเป็นศูนย์ของพหุนามa [0] + a [1] x ^ 1 + a [2] x ^ 2 + ⋯ + a [n] x ^ nด้วยสัมประสิทธิ์เชิงเหตุผลa [0], …, a [ n ] ( minpoly()) คูณค่าสัมประสิทธิ์ทั้งหมดด้วยตัวส่วนร่วมเพื่อเปลี่ยนเป็นจำนวนเต็ม ( numerator()) จากนั้นเขียนพหุนามนี้ในรูปแบบเอาต์พุตที่ต้องการ

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

SageMath 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,∞}]&

นี่คืออักขระ Unicode สามไบต์ที่แสดงถึงอนันต์ใน Mathematica

เนื่องจากอินพุตเป็นสตริง 13 ไบต์จะหายไปToExpression@ซึ่งตีความอินพุตสตริงเป็นนิพจน์พีชคณิต

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

จะคืนสิ่งที่ชอบ

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

กฎการแทนที่ถัดไปเป็นการนวดสิ่งนี้เป็นสิ่งที่มีโครงสร้าง

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

แบบฟอร์ม Horner นี้สามารถมองเห็นได้เหมือนต้นไม้:

TreeForm

เราตามกฎของ OP เริ่มต้นด้วยใบไม้ที่ลึกที่สุดทางด้านขวา

Cases ต้องผ่านการแสดงออกเริ่มต้นที่ระดับที่ลึกที่สุดพาโหนดผู้ปกครองแต่ละคนและใบซ้ายของมันและรวบรวมสิ่งนี้ลงในตารางเช่น

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

""<> รวมทุกอย่างเข้ากับสตริงว่าง


นี้ไม่ถูกต้องส่งกลับสำหรับ-299 5/7 + 42
Anders Kaseorg

@ ดังนั้นมันจะละเว้น * 7 ... ฉันจะตรวจสอบอีกครั้งเมื่อฉันอยู่ที่บ้าน
LLlAMnYP

@AndersKaseorg ใช้งานได้ แต่ตอนนี้ฉันลดลง 30 ไบต์
LLlAMnYP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.