Dark_Delphin, если как ранее писалось - получить не повторяющиеся, то только так:
$a = range(1, 5000);
shuffle($a); //перемешанный массив (сохранить в сессии), срезы которого по 16 элементов, со смещением 16, можно выводить по каждому запросу клиента.
Либо формируете массив - $a = range(1, 5000);, а затем выбираете случайные значения из него - array_rand($a, 16).
В этом случае действительно ни разу гарантированно не будет повторений. А построение таблицы, так это пустяк, потренируйтесь на простом примере.