Равномерное случайное число между двумя границами
Ранее случайное 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;
}
}Сообщить об ошибке
Войти, чтобы отправить материал.