嘿所以我正在制作一个保理程序,我想知道是否有人能以有效的方式给我任何想法,找到两个数字到指定数字的倍数,并且还添加到指定的数字。
例如我可能有
(a)(b)= 6
a + b = 5
所以基本上我只需要一种方法来找到a和b值。在这种情况下,他们将是2和3.
任何人都可以给我任何关于从哪里开始的想法?还必须考虑使用负数。
答案 0 :(得分:8)
来吧伙计们,没有必要循环,只需使用简单的数学来解决这个方程式系统:
a * b = i;
a + b = j;
a = j / b;
a = i-b;
j / b = i-b;这样:
b + j / b + i = 0
b ^ 2 + i * b + j = 0
从这里,它是一个二次方程式,找到 b (只需实现quadratic equation formula)并从那里得到 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";
}
}
真实的实景:
答案 1 :(得分: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 = 1
和$b = $sum - $a
开始,一步一步地完成,因为我们知道$a + $b == $sum
始终为真,并且$a
和{{ 1}}看看它们是否相等$b
。如果他们这样做,那就是答案。
这是否是最有效的方法是非常值得商榷的。
答案 2 :(得分: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);
}
}
这会给你留下一系列目标数量的因素。
答案 3 :(得分:1)
这基本上是一组2 simultaneous equations:
x*y = a
X+y = b
(使用x和y的数学约定求解变量,a和b求任意常量)。
但解决方案涉及二次方程式(因为x * y),因此根据a和b的实际值,可能没有解决方案,或者可能存在多个解决方案。