Алгоритм поиска положительных и отрицательных целых квадратных корней (без заданных границ)

avatar
edmamerto
8 апреля 2018 в 05:22
166
1
0

Недавно я практиковал множество алгоритмов для интервью. Мне было интересно, есть ли другой способ решить эту проблему. Я написал его таким образом, что увеличиваю его только положительно, потому что из базовой математики я знаю, что два отрицательных числа, умноженных друг на друга, дадут положительное число, поэтому мне просто нужно было сделать целое число, которое удовлетворяет условию, отрицательным.

Есть ли способ написать это элегантно, если вы не знаете, как умножить два отрицательных числа на положительное?

<?php

# Z = {integers}
# B = {x:x, x is an element of Z,  x^2 + 1 = 10}

$numNotFound = true;
$x = 0;
$b = [];

while ($numNotFound) {
    if ($x*$x + 1 == 10) {
        array_push($b, $x, $x*-1);
        $numNotFound = false;
    }
    $x++;
}

echo json_encode($b); #[3, -3]
Источник
Joseph_J
8 апреля 2018 в 05:37
1

Я смущен тем, что именно вам нужно?

ArtisticPhoenix
8 апреля 2018 в 05:39
0

Попробуйте это $ints = json_encode(range((PHP_INT_MAX * -1), PHP_INT_MAX)); ... или не ... lol \s

Joseph_J
8 апреля 2018 в 08:10
0

@ e_mam106 См. обновленный ответ. Я думаю, это больше соответствует тому, что вы просили.

Ответы (1)

avatar
Joseph_J
8 апреля 2018 в 06:32
-1

Обновлено

В этом решении не используется тот факт, что -1 * -1 = 1. Оно выводит первое найденное число как первый элемент массива. Если x=-3, то [-3,3] или если x=3 [3,-3].

$numNotFound = TRUE;
$x = 0;
$b = [];

Do{

  if ((pow($x, 2) + 1) === 10) {

    array_push($b, $x, 0 - $x); 
    $numNotFound = FALSE;

  }

  $x++;

}while($numNotFound);

echo json_encode($b); //[3, -3]