二次函數因式分解及一元二次方程
程式新版
參考了網友roviury意見進行修改。
第一個程式及第三個程式雖然較簡短,但計算較大的因子時(例如: 分解 10000x2 + 200x + 1),速度會很慢,亦是現時大部份二次因式分解程式的問題。第二個程式克服了這方面的問題,能夠快速計算出較大的整數因子。
更新日期: 2012年1月7日
第一個程式 (98 bytes)
ClrMemory: ?→A: ?→B: ?→C: √( B2 - 4AC→C:
(C - B)┘(2A→X◢ (- B - C )┘(2A→Y◢
For 0→D To 1: Fix 0: Lbl 0: 1M+:
XM - Rnd( XM => Goto 0: Norm 1: A÷M→A: MM-◢
- XAns◢ Y→X: Next: A
第二個程式 (132 bytes)
ClrMemory: ?→A: ?→B: ?→C: √( B2 - 4AC→C:
(C - B)┘(2A→X◢ (- C - B)┘(2A→Y◢
While M≠2M+: Fix 0: 1→B: X→C: Lbl 1: B→D:
X - B Rnd( X÷B→B:
D→X: 1→D:
B => Rnd( Abs( B-1→D: DC - Rnd( DC
=> Goto 1:
Norm 1: D◢ - DC◢ A÷D→A: Y→X:
WhileEnd: A
第三個程式由網友 Skwai 提供。
第三個程式(簡短版本) (81 bytes)
注意: 這個程式為第一個程式精簡版本,雖然更加簡短,但速度較慢,另外亦有一些額外限 制,程式可能無法解 ax2 + bx =0 形式的方程(即其中一個解為x=0的情況),因此亦可能無法分解 ax2 + bx (即其中一個因子為x)。
ClrMemory: ?→A: ?→B: ?→C:
2C┘(- B- √( B2 - 4AC→X◢ C┘(AAns→Y◢
For 0→D To 1: Lbl 0: 1M+:
sin(πrXM => Goto 0: A┘M→A:
MM-◢ - XAns◢ Y→X: Next: A
註1:輸入的係數可以是整數、小數或分數。若果所得的答案為小數可按 a b/c 嘗試轉為分數。
註2:若果只計一元二次方程問題,顯示兩根後可直接按AC中止程式。
註3: 若果不想顯示一元二次方程式的根,可將綠色的◢改為 : 即可。
註4: 若果函數不能分解為有理數因子,第一及第三個程式會出現Math ERROR或是長時間顯示空白,這時請按AC中止程式執行,第二個程式則會出現Math ERROR或顯示很大的分子或分母(大於10個位整數),要注意這 時是近似值答案,實際上沒有簡單因子。
例題1: 因式分解 f(x)=42x2 - 20x + 2
按 Prog 1 再按 42 EXE - 20 EXE 2 EXE (顯示 f(x)=0的一個根為1/3)
EXE (顯示 f(x)=0的另一個根為1/7)
EXE (顯示第一個因子x項係數為 3)
EXE (顯示第一個因子常數項係數為 -1)
EXE (顯示第二個因子x項係數為 7)
EXE (顯示第二個因子常數項係數為 -1)
EXE (顯示第三個常數因子)為 2
因此,42x2 – 20x + 2 = 2(3x - 1)(7x - 1)
例題2: 因式分解 9a2 - 12ab + 4b2
按 Prog 1 再按 9 EXE - 12 EXE 4 EXE (顯示2/3)
EXE (顯示2/3)
EXE (顯示3) EXE (顯示 - 2)
EXE (顯示3) EXE (顯示 - 2)
EXE (顯示1)
因此,9a2 - 12ab + 4b2 = (3a - 2b)2
例題3: 因式分解 18a2 - 32b2
按 Prog 1 再按 18 EXE 0 EXE -32 EXE (顯示 4/3)
EXE (顯示 - 4/3)
EXE (顯示3) EXE (顯示 - 4)
EXE (顯示3) EXE (顯示 4)
EXE (顯示2)
因此,18a2 - 32b2 = 2(3a - 4b)(3a + 4b)