Exercício – Criar um gerador quântico de bits aleatórios
Na unidade anterior, você aprendeu sobre os blocos de construção básicos de um programa Q#. Agora, você está pronto para escrever seu primeiro programa quântico: um programa quântico para gerar números verdadeiramente aleatórios.
Você constrói seu gerador de números aleatórios quânticos em duas fases. Nesta unidade, você constrói a primeira fase, que é gerar um único bit aleatório.
Criar o programa Q#
- Abra o Visual Studio Code e selecione File > New Text File para criar um novo arquivo.
- Guarde o ficheiro como
Main.qs
. Este ficheiro irá conter o código Q# para o seu programa.
Definir a Main
operação
A Main
operação é o ponto de entrada do seu programa.
operation Main(): Result{
// Your code goes here
}
Alocar um qubit
Você começa alocando um qubit com a use
palavra-chave. Em Q#, cada qubit alocado começa no estado $\ket{0}$ por padrão.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
Coloque o qubit em superposição
O qubit está no estado $\ket{0}$, o que não é muito útil para gerar números aleatórios. Você precisa colocar o qubit em superposição. Para fazer isso, você aplica a operação Hadamard, H
, ao qubit. A operação Hadamard altera o estado do qubit e o coloca em uma superposição igual de $\ket{0}$ e $\ket{1}$.
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$
Como o qubit está em uma superposição igual, quando você o mede, você tem 50% de chance de obter 0 e 50% de chance de obter 1.
operation Main(): Result{
use q = Qubit();
H(q);
}
Meça o qubit
Neste ponto, o qubit q
tem 50% de chance de ser medido no estado |0〉 e 50% de chance de ser medido no estado |1〉. Assim, se você medir o qubit, obterá um bit aleatório, 0 ou 1, com igual probabilidade de 50%. O valor deste bit é verdadeiramente aleatório, não há como saber com antecedência o resultado da medição.
Para medir o valor de qubit, use a M
operação e armazene o valor de medição na result
variável.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
Redefinir o qubit
Em Q#, cada qubit deve estar no estado $\ket{0}$ no momento em que são lançados. Você usa Reset(q)
para redefinir o qubit para o estado zero.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
Devolver o resultado da medição
Finalmente, você retorna o resultado da medição com a return
palavra-chave. Este resultado é um bit aleatório, 0 ou 1, com igual probabilidade.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
Programa final
O seu Main.qs
ficheiro deve ter este aspeto. O programa aloca um qubit, coloca-o em superposição, mede o qubit, redefine o qubit e retorna o resultado da medição.
Nota
O //
símbolo representa comentários opcionais para explicar cada etapa do programa.
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
Execute o programa
Para executar o programa no simulador integrado, clique em Executar acima da Main
operação ou pressione Ctrl+F5. Sua saída aparece no console de depuração no terminal.
O resultado é ou One
, o Zero
que representa um bit verdadeiramente aleatório. Você pode executar o programa novamente para ver um resultado diferente.
Na próxima unidade, você implementará a segunda fase do seu gerador quântico de números aleatórios: combinando vários bits aleatórios para formar um número maior.