PRNG не создают много PRN одновременно.Каждый вывод зависит от предыдущего вывода, PRNG имеют высокую степень состояния.
Попробуйте:
srand(time(NULL)); // once at the start of the program
for( int i = 0; i < N; ++i )
r[i] = rand();
Даже API, которые возвращают весь блок вывода в одном вызове функции, только что переместили этоцикл внутри функции.