Найдите, что 2 числа добавляют к чему-то и умножают к чему-то
Привет, поэтому я делаю программу факторинга, и мне интересно, кто-нибудь может дать мне какие-нибудь идеи относительно эффективного способа найти, что два числа кратны указанному числу, а также добавить к указанному числу.
например я могу иметь
(а)(б) = 6
а + б = 5
По сути, мне просто нужен способ найти значения a и b. В этом случае их будет 2 и 3.
Кто-нибудь может дать мне какие-нибудь идеи о том, с чего начать? Отрицательные числа также должны быть рассмотрены для использования.
4 ответа
Давай, ребята, нет необходимости в цикле, просто используйте простую математику, чтобы решить эту систему уравнений:
а * б = я;
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
а также $b = $sum - $a
, шаг за шагом, так как мы знаем, что $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);
}
}
Это оставит вас с целым рядом факторов целевого числа.
Это в основном набор из двух уравнений:
x*y = a
X+y = b
(используя математическое соглашение x и y для переменных для решения и a и b для произвольных констант).
Но решение включает в себя квадратное уравнение (из-за x*y), поэтому, в зависимости от фактических значений a и b, может не быть решения или может быть несколько решений.