№ 1774Квантовые вычисленияУровень 2

Равномерное случайное число между двумя границами

Ранее случайное N-битное число выбиралось из диапазона от 0 до $2^N-1$, $1\le N\le10$. Теперь даны целые min и max, $0\le\mathrm{min}\le\mathrm{max}\le2^{10}-1$.

Напишите операцию на языке Q#, равновероятно генерирующую число из включительного диапазона [min,max] с помощью квантовых случайных битов.

Полезная функция BitSizeI из Std.Math вычисляет число разрядов двоичной записи числа. Полные операции RandomBit и RandomNBits из предыдущих упражнений даны в заготовке.

Заготовка Q#:

namespace Kata {
    import Std.Math.*;

    operation RandomNumberInRange(min : Int, max : Int) : Int {
        // Implement your solution here...

        return -1;
    }

    // You can use the operations defined in the earlier exercises to implement your solution.
    operation RandomBit() : Int {
        use q = Qubit();
        H(q);
        return MResetZ(q) == Zero ? 0 | 1;
    }

    operation RandomNBits(N : Int) : Int {
        mutable result = 0;
        for i in 0 .. N - 1 {
            set result = result * 2 + RandomBit();
        }
        return result;
    }
}

Сообщить об ошибке

Войти, чтобы отправить материал.