Биномиальное распределение с параметрами n и p в теории вероятностей — распределение количества «успехов» в последовательности из n независимых случайных экспериментов, таких, что вероятность «успеха» в каждом из них постоянна и равна p. Рассмотрим случай, когда p=0.5 - это делается только для упрощения примера. В этом случае, согласно теории, вероятность выпадения исхода k на вероятностном пространстве из целых чисел равно P(k)=C(k,n)/2**n, где C(k,n) = n!/(k!(n-k)!) - коэффициент бинома Ньютона. Поставим перед собой цель - сформировать в массиве кубитов, который мы будем рассматривать как регистр из нескольких кубитов, состояние SUM SQRT(C(k,n))|k> Как и бит, кубит допускает два собственных состояния, обозначаемых |0> и |1> (обозначения Дирака), но при этом может находиться и в их суперпозиции. В общем случае его волновая функция имеет вид A|0>+B|1>, где A и B называются амплитудами вероятностей и являются комплексными числами, удовлетворяющими условию |A|**2+|B|**2=1 (но это не обязательно соблюдать при записи - всегда подразумевается, что происходит нормирование величин). При измерении состояния кубита можно получить лишь одно из его собственных состояний. Вероятности получить каждое из них равны соответственно |A|**2 и |B|**2. Как правило, при измерении состояние кубита необратимо разрушается, чего не происходит при измерении классического бита. Из теории вероятности имеем, что если x1,...,xn - конечная последовательность независимых случайных величин, и имеющих одинаковое распределение Бернулли с параметром p, то есть при каждом i=1..n величина 1 («успех») и 0 («неудача») с вероятностями p и q=1-p соответственно, тогда случайная величина y=x1+...+xn имеет биноминальное распределение с параметрами n и p. В квантовых вычислениях, мы имеем факт, что применение трансформации Адамара H к кубиту в состоянии |0> даёт нам его в равновероятном состоянии для исходов |0> и |1>, то есть в состоянии |0>+|1> Воспользуемся этими фактами, и сформируем значение нужного нам регистра, как "сумму значений" n независимых кубитов, находящихся в состоянии |0>+|1> Таким образом алгоритм прост: Берём несколько кубитов в состоянии |0> (регистр), для хранения значения в диапазоне [0..n] в двоичном представлении, Берём n кубитов xi в состоянии |0> Применяем преобразование Адамара к xi Суммируем xi с накоплением суммы в регистре (да, нам потребуется реализовать аналог двоичной арифметики, но на кубитах) Очищаем и освобождаем кубиты xi В результате данных преобразований, получаем регистр в состоянии SUM SQRT(C(k,n))|k> Для получения конкретного значения с биноминальным распределением, нам надо коллапсировать регистр (то есть провести измерение значений его кубитов) и преобразовать полученный вектор из |0> и |1> в целое число (двоичное представление числа) Воспользуемся инструкциями с сайта microsoft.com по установки QDK под VS Code (https://learn.microsoft.com/ru-ru/training/modules/qsharp-create-first-quantum-development-kit/2-install-quantum-development-kit-code). Создадим новый проект (или клонируйте мой https://github.com/dprotopopov/qbinom) Добавим 3.1. Трансформацию "инкремента регистра" 3.2. Трансформацию "сумма битов" 3.3. И, соответственно, операцию заполнения регистра суммой значений случайных битов Создадим пример для проверки 4.1. то есть несколько раз повторим эксперимент 4.1.1. Заполним регистр из кубитов состоянием SUM SQRT(C(k,n))|k> 4.1.2. Коллапсируем регистр, и получим конкретное значение k 4.1.3. Запишем, что нам выпал исход k 4.2. Выведем статистику выпадения исходов  PS C:\Projects\qbinom> dotnet run Hello quantum world! 0% 1% 4% 11% 20% 25% 20% 11% 3% 1% 0% Похоже? Мне кажется, что - да. https://github.com/dprotopopov/qbinom  Граф О'ман