- ベストアンサー
因数分解のプログラム
皆さんごきげんよう。 3次式の因数分解をするプログラムを作っているのですが、3重解のときの求め方で困っています。 具体的には、 for(x=-100; x<101; x++){ if(a*x*x*x+b*x*x+c*x+d == 0){ printf("%d",x); } } このようにして、与式が0になるときにその値を出力しようと思うのですが、このやり方では、例えば(x-1)^3で、答えが"1"一つだけになってしまいます。この答えを、"1","1","1"としたいのです。 よろしくお願いします。
- moomintroll
- お礼率85% (18/21)
- C・C++・C#
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
微分を使います。 f = a*x*x*x + b*x*x + c*x + d を1回微分したもの f1 = 3*a*x*x + 2*b*x + c と、2回微分したもの f2 = 6*a*x + 2*b を求めます。 これを使って、次のように判断します。 f=0 and f1≠0 ⇒ 単解 f=0 and f1=0 and f2≠0 ⇒ 二重解 f=0 and f1=0 and f2=0 ⇒ 三重解
その他の回答 (2)
- hpsk
- ベストアンサー率40% (48/119)
No.1です。 回答した直後に思いついたのですが、 手抜きな方法でよければ、 ・解が3つ見つかった -> 普通に3つ表示 ・解が1つしか見つからなかった -> 3重解(その解を3回表示) ・解が2つ見つかった -> その2点での導関数の値を計算 -> その値が0であったところが2重解 とすれば楽ですね。
補足
回答ありがとうございます。 この方法も考えたのですが、これだと(x-1)(x*x+2x+9)のようなときに解が1つしか見つからないので、うまくいきません。 解が2つのときはこの方法でいけそうですね。参考にさせてもらいます。 ありがとうございました。
- hpsk
- ベストアンサー率40% (48/119)
解はすべて -100 <= x <= 100 の整数、という仮定ですね。 多分、代入した結果が0になるところを探す、というだけではだめで、地道に多項式の除算などで因数分解しなければダメかと思います。 3重解なら、0になる点が1個しか見つからなかったら、それが3重解という判断が可能ですが、 2重解+もう1つの解、だとどちらか重解か判断できない気がします。
お礼
さっそくの回答ありがとうございます。解は-100から100までの整数という設定です。 shkwtaさんの方法でできそうですが、多項式の除算の方法も考えてみます。 ありがとうございました。
関連するQ&A
- 因数分解を行うプログラムについて
こんにちは。 今日は教えてほしいことがあってきました。 学校の課題で a,b,cは整数で、しかもaは0でないものとして、 このとき2次式 ax^2 + bx + c を、整数係数の範囲で因数分解するプログラムを作る ことになったのですが、 1.任意のa,b,cの値を入れてもらう。 2.二次方程式の解で 整数係数の範囲で因数分解できるか判別する。 3.なにかを用いて分解する。 4.結果を表示する。 (dX + e)(fX + g)のような形で。 とまでは考えられるのですが、 3.の所が難しくて、考えてからかなり時間がたってしまい らちがあかない感じです。 たすきがけを使うにしても、いまいち、よくわかりません。 どなたか、教えてください。お願いします。
- ベストアンサー
- C・C++・C#
- 因数分解?について
現在、電気の勉強をしております。 久しぶりに因数分解してみて解らなくなりました。 (因数分解という単語も出てこなかったです・・・^^;) (1) 4X + XR = 24 + 2R の式で、 (2) 2R = 8X である場合、 R = 8X/2 より R = 4X としました。 それを(1)式に当てはめて 4X + 4X^2 = 24 + 8X 左辺の4Xを右辺移して引き 4X^2 = 24 + 4X 両辺を4で割り、 X^2 = 6 + X X^2 - X - 6 = 0 として 因数分解すると (X -3) (X + 2) となりました。 X^2 - X - 6 = 0 の式の X に「 -3 」を当てはめると 9 - (-3) - 6 = 0 で式が成り立ちません・・・・ 同じく、「2」を当てはめても、 4 - 2 - 6 = 0 となります。 答えは3であると分かるのですが、因数分解が成り立たず考えております。 どの辺りの考え方ダメなのでしょうか?よろしくお願いします。
- ベストアンサー
- 数学・算数
- 因数分解についてです
数Iの範囲で因数分解をすると例えば 8x^2+6x-5を因数分解せよ。 という問題なら(4x+5)(2x-1)という答えになりますよね。 でも後に数IIでax^2+bx+cはa(x-α)(x-β)というのを利用して因数分解をするのを習いました。 この方法でやると、私の計算が合っていれば8(x-1/2)(x+5/4)となりました。 後者と前者ではかなり数に違いが出てくるのですが…私の計算が間違っているのでしょうか??;
- ベストアンサー
- 数学・算数
お礼
さっそくの回答ありがとうございます。 微分を使うとは、思いもよりませんでしたが、どうやらこの方法でできそうです。かなり悩んでいたので、とても助かりました。 ありがとうございました。