嘿,所以我正在制作一个因式分解程序,我想知道是否有人可以给我任何想法,以有效地找到两个数字与指定数字的倍数,并添加到指定的数字。
例如我可能有
(a)(b) = 6
a + b = 5
所以基本上我只需要一种方法来找到 a 和 b 值。在这种情况下,它们将是 2 和 3。
谁能给我任何关于从哪里开始的想法?还必须考虑使用负数。
来吧伙计们,不需要循环,只需使用简单的数学来求解这个方程组:
a*b = 我;
a+b = j;
a = j/b;
a = ib;
j/b = ib;所以:
b + j/b + i = 0
b^2 + i*b + j = 0
从这里,它是一个二次方程,找到b(只需实现二次方程公式)并从那里得到 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
and开始$b = $sum - $a
,一次一步地遍历它,因为我们知道那$a + $b == $sum
总是正确的,然后乘以$a
and$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)。
但解涉及二次方程(因为x*y),所以根据a和b的实际值,可能没有解,也可能有多个解。