Cで因数分解を実装する

More than 1 year has passed since last update.


Cで因数分解を実装する

中学数学網羅第三弾です。相当前に作ったプログラムですので今回はあんまり自信がないです自分のメモ程度であとはフィードバックがもらえたらいいと思います

まあザッカーバーグの名言で

「とりあえずリリースしようぜ!」っていうのがありますからねw


中学因数分解の説明

高校数学でも因数分解があると聞いたので中学因数分解の説明をやっていきたいと思います。

そもそも因数分解とは

因数...掛け算

分解...分ける

つまり掛け算の形に変形する

ということですが公式を利用する問題と利用しない公式があるのですが

今回は公式を利用する形で

4つの公式があると習いました(今回は使わないですが)

x^2 + (a + b)x + ab = (x + a)(x + b)...①
\\
x^2 + 2ax + a^2 = (x + a)^2...②
\\
x^2 + 2ax - a^2 = (x - a)^2 ...③
\\
x^2 - a^2 = (x + a)(x - a)...④

これが公式なのですが全て①の公式に当てはめることができます

なので①の公式を使えば公式を利用する因数分解はできるということです


早速コーディング

数式を

x^2 + ax + b

と定義して変数を宣言します


main.c


int a = 0; //aの部分
int b = 0; //bの部分
int i = 0; //ループ文のカウンタ
int j = 0; //ループ文の中に入れるループ文のカウンタ


今回はdoubleを使わなくてもいいのかななんて思ってました。

printfで入力を促します


main.c


printf("x^2+ax+bのaとbの部分を入力してください\n"); //入力を促します

printf("a = "); //aの入力を促す

scanf("%d", &a); //aを読み込む

printf("b = "); //bの入力を促す

scanf("%d", &b); //bを読み込む



本格的な計算

if文で-と条件分けしてループ文で一つずつ当てはめて数字を絞り出して最後に残った数字を出力するシステムにしたのですがこれだと-がつくときにかなりの処理時間を用いてしまうのですが答えが出ればいいかなと思いました。


main.c


//aとbがどちらも正の数だった時の計算
if (a > 0 && b > 0) {
//jとiを九九のように一つずつ上げていく
for (i = 1; i <= b; i++) {
for (j = 1; j <= b; j++) {
//jとiの積がbと一致するかどうかのif文
if (i * j == b) {
//さらにjとiの和がaかどうかのif文
if (j + i == a) {
a = i;
//出力
printf("(x+%d)(x+%d)" , j, i);
//ブレイク
break;
}
}
}
}

}
//aとbのどちらかが負の数だった時の計算
if (a < 0 || b < 0) {
for (i = -1; i <= b; i--) {
for (j = -1; j <= b; j--) {
if (i * j == b) {
if (j + i == a) {
a = i;
printf("(x%d)(x%d)" , j, i);
break;
}
}
}
}
}


つまりiが1の時jを1〜bまでかけていくということをしています


ソースコード

今回はあっているかどうかわからないですが答えはでます


main.c


#include <stdio.h>

int main() {
// insert code here...

int a = 0; //aの部分
int b = 0; //bの部分
int i = 0; //ループ文のカウンタ
int j = 0; //ループ文の中に入れるループ文のカウンタ

printf("x^2+ax+bのaとbの部分を入力してください\n"); //入力を促します

printf("a = "); //aの入力を促す

scanf("%d", &a); //aを読み込む

printf("b = "); //bの入力を促す

scanf("%d", &b); //bを読み込む

//aとbがどちらも正の数だった時の計算
if (a > 0 && b > 0) {
//jとiを九九のように一つずつ上げていく
for (i = 1; i <= b; i++) {
for (j = 1; j <= b; j++) {
//jとiの積がbと一致するかどうかのif文
if (i * j == b) {
//さらにjとiの和がaかどうかのif文
if (j + i == a) {
a = i;
//出力
printf("(x+%d)(x+%d)" , j, i);
//ブレイク
break;
}
}
}
}

}
//aとbのどちらかが負の数だった時の計算
if (a < 0 || b < 0) {
for (i = -1; i <= b; i--) {
for (j = -1; j <= b; j--) {
if (i * j == b) {
if (j + i == a) {
a = i;
printf("(x%d)(x%d)" , j, i);
break;
}
}
}
}
}

}


ありがとうございました。