Outline and solid fill. both would be quite optimal (i think)

imagine a square inside the circle, you can calculate the corner offset using one Squareroot, now you have 4 secants, which can be further splitted up into 8, all kaidoscopically symetric (heh just poped up in my head)
now the cords of these are 45'degree of the circle as Harry said Not much aritmetics to do now.
Code:
|\
| \
|y  \  <- this is curved
|    |
_x_|
for filled circles, you just need to store the edge distance to the middle, for each pixel in X axis, starting at the square result we've got from earlier to full circle radius. Y is successively increasing in a nested loop inside the X loop, and exits as soon as point enter circle, using pythagoras, the the value is stored, and X incremented (Y preserves) and it goes on until you've got all edge points into an array.

to draw the filled circle:
loop trough X or responding axis for each 8 mirror, in responding direction, and nested: loop Y from the middle to the value stored in the array, and plot each pixel. No aritmetics done in this process, so if you have several circles with same radius you could use the same array too. And lastly, fill the square in the middle with two nested loops.

to draw outline circle:
loop trough X and Y in the same way excep Y value is preserved, just as in the edge finding algoritm.

Well, this is straith from my head, and it might be that someone else invented this earlier or even got a better solution, i guess Harry knows