1

嘿,所以我正在制作一个因式分解程序,我想知道是否有人可以给我任何想法,以有效地找到两个数字与指定数字的倍数,并添加到指定的数字。

例如我可能有

(a)(b) = 6

a + b = 5

所以基本上我只需要一种方法来找到 a 和 b 值。在这种情况下,它们将是 2 和 3。

谁能给我任何关于从哪里开始的想法?还必须考虑使用负数。

4

4 回答 4

8

来吧伙计们,不需要循环,只需使用简单的数学来求解这个方程组:

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";
 }
}

真人实景:

http://codepad.org/JBxMgHBd

于 2012-03-07T16:10:30.380 回答
3

这是我将如何做到的:

$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 = 1and开始$b = $sum - $a,一次一步地遍历它,因为我们知道那$a + $b == $sum总是正确的,然后乘以$aand$b看看它们是否相等$product。如果他们这样做,那就是答案。

看到它工作

这是否是最有效的方法是非常有争议的。

于 2012-03-07T15:59:20.710 回答
2

对于乘法,我建议使用模运算符 (%) 来确定哪些数字均分到目标数字中,例如:

$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);
    }
}

这将为您留下一系列目标数字的因素。

于 2012-03-07T16:03:12.897 回答
1

这基本上是一组 2个联立方程

x*y = a
X+y = b

(对要求解的变量使用 x 和 y 的数学约定,对任意常数使用 a 和 b)。

但解涉及二次方程(因为x*y),所以根据a和b的实际值,可能没有解,也可能有多个解。

于 2012-03-07T16:10:57.163 回答