То есть надо заполнить плоскость окружностями радиуса от р1 до р2 случайным образом?
Надо точно окружности ставить или примерно? Если примерно - то вообще проблемы не вижу.
Выбираем регион куда будем кидать, для него рассчитываем квадраты расстояний до соседних окружностей, где находим приемлемый минимум - туда и кидаем. Если минимумов несколько, то в случайный. Для простоты заполняем поле слева направо (типо пока есть место, кидаем в вертикальную полоску, как место кончается - сдвигаем полоску правее). Скорость будет велика (корень-то считать не надо), считать вообще можно в целых числах.