我有一个函数,给定两个整数A和B,返回区间[A..B]内的整个正方形的数量(包括两端)
例如,假设$ A = 4且$ B = 17,则函数应返回3,因为区间[4..17]中有三个整数平方。即4 = 2 *,9 = 3 *和14 = 4 *
我如何得到一些数字的正方形数字?
答案 0 :(得分:1)
此函数循环遍历$start
和$end
之间的所有整数。如果数字的平方根等于其整数部分,则$count
增加1。
function countSquares($start, $end)
{
$count = 0;
for($n=$start;$n<=$end;$n++)
{
if(pow($n, 0.5) == intval(pow($n, 0.5)))
{
//echo "$n<br>";
$count++;
}
}
return $count;
}
echo countSquares(4, 17);
然而,当使用大数字时,第一个功能非常慢
这个其他功能可以更快地完成工作,而且代码也更短
$start
和$end
之间的整数平方根的数量是通过将0
和$end
之间的整数平方根的数量减去0
和$start-1
之间的整数平方根的数量来获得的。 1}}和$start-1
。 (我使用function countSquares2($start, $end)
{
return floor(pow($end, 0.5)) - floor(pow($start-1, 0.5));
}
echo countSquares2(1000000, 10000000);
,因为您的间隔包括起始编号)
{{1}}
答案 1 :(得分:0)
或者你可以使用sqrt函数来实现:
function getSquaresInRange($a, $b){
return floor(sqrt($b)) - ceil(sqrt($a)) + 1;
}