Найдите, что 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";
 }
}

Реальное живое действие:

http://codepad.org/JBxMgHBd

Вот как я бы это сделал:

$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, может не быть решения или может быть несколько решений.

Другие вопросы по тегам