Exercício Parte 1 - Crie um gerador de bits aleatórios quânticos
Na unidade anterior, você aprendeu sobre os blocos de construção básicos de um programa Q#. Agora, é hora de você criar seu primeiro programa quântico para gerar números verdadeiramente aleatórios.
Você criará o gerador quântico de números aleatórios em duas fases. Nesta unidade, você cria a primeira fase, que é gerar um bit aleatório.
Criar o programa de Q#
- Abra o Visual Studio Code e selecione Arquivo > Novo Arquivo de Texto para criar um arquivo.
- Salve o arquivo como
Main.qs
. Esse arquivo conterá o código Q# do programa.
Definir a operação Main
A operação Main
é o ponto de entrada do programa.
operation Main(): Result{
// Your code goes here
}
Alocar um qubit
Você começa alocando um qubit com a palavra-chave use
. Em Q#, cada qubit alocado começa no estado $\ket{0}$ por padrão.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
Colocar o qubit em superposição
O qubit está no estado $\ket{0}$, que não é muito útil para a geração de números aleatórios. Você precisa colocar o qubit em superposição. Para realizar o processo, aplique 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, você terá 50% de chance de obter 0 e 50% de chance de obter 1 ao realizar a medição.
operation Main(): Result{
use q = Qubit();
H(q);
}
Medir o qubit
Aqui, o qubit q
tem 50% de chance de ser medido no estado |0〉 e 50% de chance de ser medido no estado |1〉. Ao medir o qubit, você obterá um bit aleatório, 0 ou 1, com igual probabilidade de 50%. O valor desse bit é verdadeiramente aleatório e não há como prever o resultado da medição.
Para medir o valor do qubit, use a operação M
e armazene o valor da medição na variável result
.
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 da liberação. Use Reset(q)
para redefinir o qubit para o estado zero.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
Retornar o resultado da medição
Por fim, você retorna o resultado da medição com a palavra-chave return
. Esse 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 arquivo Main.qs
deve ter esta aparência. O programa faz a alocação, a superposição, a medição e a redefinição de um qubit e retorna o resultado dessa medição.
Observação
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;
}
Executar o programa
Para executar o programa no simulador interno, selecione Executar acima da operação Main
ou pressione Ctrl+F5. Sua saída aparece no console de depuração no terminal.
O resultado é One
ou Zero
, e representa um bit verdadeiramente aleatório. Execute o programa novamente para ver um resultado diferente.
Na próxima unidade, você implementará a segunda fase do gerador quântico de números aleatórios: combinando vários bits aleatórios para formar um número maior.