ねえ、私はファクタリングプログラムを作成しています。指定された数に倍数の2つの数を見つけ、指定された数に追加する効率的な方法について、誰かが私にアイデアを教えてくれるかどうか疑問に思っています。
たとえば、私は持っているかもしれません
(a)(b)= 6
a + b = 5
したがって、基本的には、aとbの値を見つける方法が必要です。この場合、2と3になります。
どこから始めればいいのか、誰か教えてもらえますか?負の数も使用を検討する必要があります。
さあ、ループする必要はありません。簡単な数学を使ってこの方程式系を解いてください。
a * b = i;
a + b = j;
a = j / b;
a = ib;
j / b = ib; それで:
b + j / b + i = 0
b ^ 2 + i * b + j = 0
ここから、その2次方程式であり、 bを見つけるのは簡単です( 2次方程式の式を実装するだけです)。そこからaの値を取得します。
編集:
そこに行きます:
function finder($add,$product)
{
$inside_root = $add*$add - 4*$product;
if($inside_root >=0)
{
$b = ($add + sqrt($inside_root))/2;
$a = $add - $b;
echo "$a+$b = $add and $a*$b=$product\n";
}else
{
echo "No real solution\n";
}
}
実際の実写:
これが私がそれをする方法です:
$sum = 5;
$product = 6;
$found = FALSE;
for ($a = 1; $a < $sum; $a++) {
$b = $sum - $a;
if ($a * $b == $product) {
$found = TRUE;
break;
}
}
if ($found) {
echo "The answer is a = $a, b = $b.";
} else {
echo "There is no answer where a and b are both integers.";
}
基本的に、とから始めて$a = 1、$b = $sum - $aそれが常に真実であることがわかっているので、一度に1つずつステップスルーし$a + $b == $sum、乗算$aし$bて、それらが等しいかどうかを確認します$product。もしそうなら、それが答えです。
それが最も効率的な方法であるかどうかは非常に議論の余地があります。
乗算では、モジュロ演算子(%)を使用して、次のようにどの数値がターゲット数値に均等に分割されるかを決定することをお勧めします。
$factors = array();
for($i = 0; $i < $target; $i++){
if($target % $i == 0){
$temp = array()
$a = $i;
$b = $target / $i;
$temp["a"] = $a;
$temp["b"] = $b;
$temp["index"] = $i;
array_push($factors, $temp);
}
}
これにより、ターゲット数の要素の配列が残ります。
これは基本的に2つの連立方程式のセットです:
x*y = a
X+y = b
(解く変数にはxとyの数学的規則を使用し、任意の定数にはaとbを使用します)。
ただし、解には2次方程式が含まれるため(x * yのため)、aとbの実際の値によっては、解がない場合や、複数の解が存在する場合があります。