- 締切済み
C言語プログラミングで因数分解
たとえばp、qを入力して、 うまく、p=a+b q = a*bとなるa,bが見つかったときにだけ g(x)= x^2 + px + q = (x+a)(x+b) となるようなプログラムを作りたいのですが、どうしたらいいのでしょうか? あと、たとえば、 x+a という式に a=-4 を代入すると、x + -4 と表示されます。 これは地道に、ifで場合わけしてaがマイナスの時には-aを出力する ’というようなことをしなければならないのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yaggy
- ベストアンサー率33% (4/12)
回答No.1
数学的には(おおざっぱな言い方をすると)2次方程式の解の公式から a=-(-p+√(p^2-4q))/2、b=-(-p-√(p^2-4q))/2 で計算すれば問題ありません。 しかし現実問題として、a、bが虚数になる場合(p^2-4q<0)はC言語ではエラーとなるので分岐する必要があります。また、必ずしも整数解が得られるとは限りません(係数p、qが整数だったとしても)。「うまく見つかる」が「うまく整数解が見つかる」という意味であるのでこれを判別してやる必要があります。 一番単純なのは計算して求めた実数a、bが整数である(この場合はa、bは必ず整数になるはずですが、一般には丸め誤差の都合上必ずしも整数にならない(ex. 0.999998)こともあります)ことを判定する、というのがいいと思います。 全く別の考え方としては、qを素因数分解して2数の積にします(ex. 15=1*15、3*5、(-1)*(-15)、(-3)*(-15))。これらを足してpになるものを抜き出す、というアルゴリズムも考えられます。 x + -4の現象についてはどうしても条件分岐が必要になります。