So what you are asking is more than one divisor.
Well, in any case it shouldn't be hard-bracketed by level, it should be something like this:
Let R be the number of registered player
Find D = R/45 (integer division, ergo remainder is discarded)
Find G = R/D (due to integer division, G can be anywhere between 45 and 89, inclusive)
The first G player, ordered by level and experience, goes into one group, then the next G go into another and so on, until D groups are formed.
Again, this would put between 45 and 89 players into each field, which is a reasonable amount. Thou obviously it can be adjusted by changing the "45", (If we call it C, the actual number in each field would be between C and 2*C-1, inclusive)
Granted, anything dynamic might be a bit harder to code than hard-bracketing one way or another, mostly due to potential resource allocation. But this would be ideal IMO.