ЗЫ для ценителей расскажу словами еще один алгоритм. Отрезок [1;n] разбиваем пополам, и решаем задачу рекурсивно, разделяя K на две НЕРАВНЫЕ (очевидно, т.к. при равных будет эмуляция равномерной сетки, заполняющей интервал [1;n] с равномерным шагом) части по БИНОМИАЛЬНОМУ РАСПРЕДЕЛЕНИЮ (отлично аппроксимируется обычным Гауссом), далее каждую половину интервала так же разбиваем пополам с разделением части K этой половины интервала аналогично и т.д. Когда дошли до K=N берем все точки интервала, когда K=0 прекращаем безобразие и ничего не берем из этого интервала. Нафига такие сложности - алгоритм выше имеет временнУю сложность O(n), а описанный O(k). Если k сравнимо с n, то проще не морочиться и взять однострочник выше. Если n велико, а k относительно мало - то описанный алгоритм.