Lấy ngẫu nhiên m số nguyên khác nhau trong khoảng từ 0 đến n-1. (n>m)

Chào các bạn!
Mình cần viết hàm để cho ra ngẫu nhiên m số nguyên khác nhau trong khoảng từ 0 đến n-1. Dưới đây là code của mình, mình dùng hàm random_shuffle nhưng cảm giác không được tự nhiên và tối ưu lắm. Các bạn gợi ý giúp mình có cách nào nhanh và hay hơn không ạ? Mình cảm ơn nhiều!

void random_m(int *a, int *b, int n, int m) {
	cout << "\nn numbers are ";
	for (int i = 0; i < n; i++)
	{
		a[i] = i;
		cout << a[i];
	}
	cout << endl;

	random_shuffle(&a[0], &a[n]);

	for (int i = 0; i < m; i++)
	{
		b[i] = a[i];
	}

	cout << "\nrandom extracting is ";
		for (int i = 0; i < n; i++)
		{
			cout << b[i];
		}
		cout << endl;
}

vậy là tối ưu rồi. Ví dụ chia bài thì cũng xào lên rồi lấy lần lượt từng lá từ trên xuống dưới cũng là lấy m lá bài từ n lá bài vậy.

mà chỗ xuất thì xuất m phần tử thôi chứ sao lại cho xuất n phần tử.

Chỉ lấy m phần tử thì custom thôi.
Ngoài ra còn có cách chọn đúng O(m) mem và O(n) time.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?