Jump to content

How can I divide value by x and count how many times it is possible?


Staggan

Recommended Posts

Not sure my question is clear.. hehe

 

I have value X and want to know how many times I can divide it by y for example:

 

11 / 2

 

Will give me:

 

11 / 2 = 5 (ignore remainder)

 

5 / 2 = 2 (ignore remainder)

 

2 / 2 = 1 (ignore remainder)

 

 

So 11 / 2 works 3 times

 

Any ideas?

 

I am using this to work out where my value falls in terms of power of 2 in a sequence

 

Thanks

 

Using floor() is what were after

 

<?php
function divideCount($x,$y){
$value = floor($x/$y);
return $value;
}

echo divideCount(11,2)."<br />";
echo divideCount(5,2)."<br />";
echo divideCount(2,2)."<br />";
?>

No need for loops. I believe you are wanting the log() using a base of 2 (and of course using floor).

 

function dividedByCount($number, $base)
{
    return floor(log($number, $base)); // <== SOLUTION
}

//Unit test
for($i=1; $i<=36; $i++)
{
    $count = dividedByCount($i, 2);
    echo "$i : $count <br>\n";
}

 

Output of the unit test:

1 : 0
2 : 1
3 : 1
4 : 2
5 : 2
6 : 2
7 : 2
8 : 3
9 : 3
10 : 3
11 : 3
12 : 3
13 : 3
14 : 3
15 : 3
16 : 4
17 : 4
18 : 4
19 : 4
20 : 4
21 : 4
22 : 4
23 : 4
24 : 4
25 : 4
26 : 4
27 : 4
28 : 4
29 : 4
30 : 4
31 : 4
32 : 5
33 : 5
34 : 5
35 : 5
36 : 5 

Wow, lot of answers...

 

Yes, basically I am looking for the highest power 2 without going over my original number....

 

I just did this...

 

while ($result !== 1){

$count += 1;

$result = (int)($result / 2);

}

 

 

Not pretty, but works....

 

I'll look at some of the other suggested ideas to clean it up :)

 

 

 

yeah, but the OP is only trying to get the neerest square that can be used without going over the original number...either that or I totally missread the post (it's been a long day)

The OP wanted to know how many times he can divide a number by another number - he only gave an example of 2. But, even if it was only 2 square root has no bearing on this. The square root of 36 is 6, but you cant divide that by two 6 times.

 

(1) 36 / 2 = 18, (2) 18 / 2 = 9, (3) 9 / 2 = 4.5,  (4) 4 / 2 = 2, (5) 2 / 2 = 1

 

I only did some rudimentary validation, but I believe my solution will give the exact results.

 

EDIT: Just to be clear, if we are wanting to know how many times a number X can be divided by two we aren't looking for the square root of the number [ X ^ 2 <= Y ], we are solving for [ 2 ^ X <= Y ]

 

Wow, lot of answers...

 

Yes, basically I am looking for the highest power 2 without going over my original number....

 

I just did this...

 

while ($result !== 1){

$count += 1;

$result = (int)($result / 2);

}

 

 

Not pretty, but works....

 

Please look at the solution I provided. You don't need a loop. The opposite of a "power" is the "log". The function I provided should get you exactly the result you want with a single line (and no loop).

 

function dividedByCount($number, $base)
{
    return floor(log($number, $base)); // <== SOLUTION
}

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.