Lets say I've got a number line from $1$ to $100$. I want to randomly select $20$ integer numbers from the number line. But I want the numbers to tend to come from say $1$-$50$, with only a few coming from between $50$-$100$.
My initial thought on how to solve the problem is to use an exponential function, say $2^n$. Then, until I've reached $20$ numbers, select a random decimal between $1$ and $\sim 6.65$ for $n$. Rounding the result to the nearest integer to use as my next number.
I'm wondering if there is a better solution.
There are too many possible answers here because your question is so vague. Here's one possible technique: Select a random number $r$ uniformly between 0 and 1. Calculate $r' = 1+\lfloor100r^2\rfloor$. Then you get $r'$ between 1 and 50 about 70.7% of the time. (Whenver $r$ is less than ${\sqrt 2 \over 2}\approx 0.707$), and between 1 and 25 half the time. It will be between 1 and $n$ about $10\sqrt n$ percent of the time.
The $r^2$ is the important part here; the $1+\lfloor100\ \cdots\rfloor$ stuff is only to transform the range of the function from real numbers in $[0,1]$ to integers in $[1,100]$.
You can bias the thing as much as you like toward low numbers by changing the $r^2$ to $r^3$ or some higher power. If you use $r^n$, then you get $r'$ bigger than 50 only whenever $r$ is less than $1\over \sqrt[n]{2}$.
In general, you can pick any function $f : [0,1]\to[0,1]$ that has the property that $f(x)≤x$, and then use $r' = 1+\lfloor100f(r)\rfloor$. By drawing different $f$, you can bias the generator more or less toward smaller numbers.