Php在条件下获得完美的正方形


Php getting perfect square with condition

如何获得数字列表的完美平方,除了整数是列表中前一个整数的平方。

对于 30 的输入,结果如下:

1
2
3
square
5
6
7
8
square
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
square
26
27
28
29
30

我只能得到完美正方形的结果,但问题是,我也得到了 16 作为正方形。 它不被认为是正方形,因为 4 已经是一个正方形。谢谢。

如果要检查数字是否为"完全平方":

  1. 检查 sqrt() 是否为整数。
  2. 如果是,请检查这是否是质数

如果你想生成完美的正方形,

  1. 生成质数
  2. 计算他们的平方

将完美正方形添加到查找数组中,并检查它是否已经是一个完美的正方形,然后忽略它。

用:

<?php
$isAlreadySquare = array();
for($i=1; $i<=30; $i++) {
    $isSquare = false;
    for($j=1; $j<$i; $j++) {
        $s = $j*$j;
        if($s==$i && !in_array($j,$isAlreadySquare)) {
            $isAlreadySquare[] = $i;
            $isSquare = true;
        }
    }
    if($isSquare) {
        echo "square<br>";
    } else {
        echo $i."<br>";
    }
}
?>

只是另一种解决方案:

$sq = $u = array();
for($i = 1; $i <= 30; $i++) {
    $t = sqrt($i);
    if ((int) $t == $t) {
        $sq[] = $i;
    }
}
foreach ($sq as $v) {
    if (!in_array(sqrt($v), $sq)) {
        $u[] = $v;
    }
}
print_r($u);
Array
(
    [0] => 4
    [1] => 9
    [2] => 25
)
我想

到的解决方案之一是保留查找数组或字典类型的数据结构,当你得到完美的平方时,保持平方值并将条件放成这样,正如你要做的,你可以从下面的查找表中删除元素 满足条件, 因为在排序的数字中,你不会再得到它。

                  Is Number Perfect square && Not available in lookup table