x
Solved

# array

Posted on 2011-09-23
Medium Priority
344 Views
Fill array from 1 to 512.  Echo only values that are powers of 2
0
Question by:rgb192
• 2
• 2
• 2
• +1

LVL 13

Accepted Solution

themrrobert earned 2000 total points
ID: 36589222
Do you really need to fill an array then?

Try this:

for(\$x=1;\$x<=512;\$x++)
if(intval(sqrt(\$x))==sqrt(\$x)) //match
echo "\$x is a power of 2<br />";

this outputs:

1 is a power of 2
4 is a power of 2
9 is a power of 2
16 is a power of 2
25 is a power of 2
36 is a power of 2
49 is a power of 2
64 is a power of 2
81 is a power of 2
100 is a power of 2
121 is a power of 2
144 is a power of 2
169 is a power of 2
196 is a power of 2
225 is a power of 2
256 is a power of 2
289 is a power of 2
324 is a power of 2
361 is a power of 2
400 is a power of 2
441 is a power of 2
484 is a power of 2

Now if you want to know if 2^x = (array) that's a different thing altogether (this will find values like 512, 256, etc) ill get you the code in a sec
0

LVL 13

Expert Comment

ID: 36589261
for(\$x=0;\$x<10;\$x++)
echo "2 to the x(\$x) power = " . pow(2, \$x)."<br />";

results:

2 to the x(0) power = 1
2 to the x(1) power = 2
2 to the x(2) power = 4
2 to the x(3) power = 8
2 to the x(4) power = 16
2 to the x(5) power = 32
2 to the x(6) power = 64
2 to the x(7) power = 128
2 to the x(8) power = 256
2 to the x(9) power = 512
0

LVL 8

Expert Comment

ID: 36589294
<?php
\$power = 2;

// fill an array with numbers
for (\$i=1;\$i < 513; \$i++) {
\$joe[] = \$i;
\$check = log(\$i) / log(\$power);

// if \$check is an integer then it is a power of 2
if (\$check == intval(\$check)) {
echo \$i ."<BR>\n";
}
}
//var_dump(\$joe);
?>
0

LVL 8

Expert Comment

ID: 36589321
sounds like a school problem, but the array is extraneous unless the check must be done while filling the array.

2^x = y  (2 to the power of x)
x log 2 = log y
x = (log y) / (log 2)

Since the last line is true then all integer values of x are powers of 2 for the input y = 1..512
0

LVL 1

Author Comment

ID: 36589326
I get all values on code sample 1
0

LVL 2

Expert Comment

ID: 36589339
I'm with themrrobert on this one.  You didn't give us enough information.

If you really wanted it in an array, you could take robert's example and modify it.

``````\$array_variable = NULL;
for(\$x=0;\$x<10;\$x++){
\$array_variable .= pow(2,\$x) . ",";
}
\$array = explode(",",\$array_variable);
``````

Note that this method will leave a blank record at the end you will need to account for.
0

LVL 1

Author Closing Comment

ID: 36589502
Thanks
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.