0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自動因数分解装置を作成してみよう/中学数学編 vol.1

Last updated at Posted at 2020-05-25

プログラミングを利用して因数分解できないか

※改善あればWelcomeですので、宜しくお願い致します。

勉強がてら自動因数分解装置を作ってみようと思い始めてみたが、ソースコードが美しくない。。。
ところどころ無理やり感満載ではあるが、中学基本数学レベルであれば因数分解できるソースは完成した。

因数定理から因数分解したほうが良いかもしれないが。おいおい分数が出ると困るので、地道にやるしかないのだろうか。

以下のソースコードを利用すれば、中学数学レベルであればコンピュータがやってくれるので、宿題がはかどるかも!?

おいおいは以下のような因数分解できるようになればなと思う。
STEP1はそんなに時間かからなそうではあるが、今日は疲れたので中学数学まで。

STEP1 : (a+c)x**2 + (ad+bc)x + bd = (ax+b)(cx+d)
STEP2 : 因数定理を活用した3次式の因数分解
STEP3:その他大学入試で出題されるレベルのものを網羅的に

以下のコードに入力値を渡せば因数分解の式が出力される。

【inputのルール】
①符号と式の間はスペースをあける
②1*x の場合は、通常は1を省略するが、1x と記載する

(例)
input
x**2 - 20x + 96
output
(x - 12)(x - 8)

input
x**2 - 9
output
(x + 3)(x - 3)

input
x**2 - 4x + 4
output
(x - 2)**2


import math

a = 0
b = 0
jud1 = "+"
jud2 = "+"

nums = input().split()

if len(nums) <= 3:
    a = int(math.sqrt(int(nums[2])))
    print("(x + " + str(a) + ")(x - " + str(a) + ")")
else:
    if nums[3] == "-":
        nums[4] = int(nums[4])*(-1)
    
    li = list(nums[2].split("x"))
    
    if nums[1] == "-":
        li[0] = int(li[0])*(-1)

    for i in range(-100,100):
        if (i * (int(li[0]) - i)) == int(nums[4]):
            a = i
            b = int(li[0]) - i
    
    if a < 0:
        jud1 = "-"
        
    if b < 0:
        jud2 = "-"
    
    if a == b:
        print("(x " + jud1 , str(abs(a)) + ")**2")
    else:
        print("(X " + jud1 , str(abs(a)) + ")(x " + jud2 , str(abs(b)) + ")")

改善したいポイント

初学者が故に実は簡単な求め方があるかもしれないが、**各項の係数を簡単に取り出したい(できれば符号含め)**というのができればよりスマートに書けそうだなと思う。
また、x**2 - 9のように項が2つしかないパターンを無理やり

if len(nums) <= 3:
    a = int(math.sqrt(int(nums[2])))
    print("(x + " + str(a) + ")(x - " + str(a) + ")")

としているところが一番気持ち悪い。
今のところは通過できているが、例えばおいおいx**3 - 8 みたいのが出たときに困るのでどうしたものかと考え中。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?