연습 1부 - 양자 임의 비트 생성기 만들기
이전 단원에서는 Q# 프로그램의 기본 구성 요소에 대해 알아보았습니다. 이제 첫 번째 양자 프로그램인 진정한 난수를 생성하는 양자 프로그램을 작성할 준비가 되었습니다.
양자 난수 생성기는 두 단계로 빌드합니다. 이 단원에서는 단일 임의 비트를 생성하는 첫 번째 단계를 빌드합니다.
Q# 프로그램 만들기
- Visual Studio Code를 열고 파일>새 텍스트 파일을 선택하여 새 파일을 만듭니다.
- 파일을
Main.qs
로 저장합니다. 이 파일에는 프로그램에 대한 Q# 코드가 포함됩니다.
Main
작업 정의
Main
작업은 프로그램의 진입점입니다.
operation Main(): Result{
// Your code goes here
}
큐비트 할당
use
키워드를 사용하여 하나의 큐비트를 할당하는 것으로 시작합니다. Q#에서는 할당하는 모든 큐비트는 기본적으로 $\ket{0}$ 상태에서 시작합니다.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
큐비트를 중첩 상태로 만들기
큐비트는 $\ket{0}$ 상태에 있는데, 이는 난수를 생성하는 데 그다지 유용하지 않습니다. 큐비트는 중첩에 넣어야 합니다. 이를 위해 큐비트에 Hadamard 연산, H
를 적용합니다. Hadamard 연산은 큐비트의 상태를 변경하여 $\ket{0}$과 $\ket{1}$의 동등한 중첩 상태로 만듭니다.
$$ H \ket{0} = \frac{1}{\sqrt{2}}(\ket{0} + \ket{1}) $$
큐비트는 동등한 중첩 상태에 있으므로 큐비트를 측정하면 0이 나올 확률이 50%이고 1이 나올 확률이 50%입니다.
operation Main(): Result{
use q = Qubit();
H(q);
}
큐비트 측정
이 시점에서 큐비트 q
는 |0〉 상태로 측정될 확률이 50%이고 |1〉 상태로 측정될 확률도 50%입니다. 따라서 큐비트를 측정하면 임의 비트(0 또는 1)가 50% 확률로 표시됩니다. 이 비트의 값은 완전히 임의적이므로 측정 결과를 미리 알 수 있는 방법이 없습니다.
큐비트 값을 측정하려면 M
연산을 사용하고 측정값을 result
변수에 저장합니다.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
큐비트 다시 설정
Q#에서 모든 큐비트는 릴리스될 때까지 $\ket{0}$ 상태에 있어야 합니다. Reset(q)
를 사용하여 큐비트를 제로 상태로 다시 설정합니다.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
측정 결과 반환
마지막으로 return
키워드를 사용하여 측정 결과를 반환합니다. 이 결과는 0 또는 1의 동일한 가능성을 갖는 임의 비트입니다.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
최종 프로그램
Main.qs
파일은 다음과 같이 표시됩니다. 이 프로그램은 큐비트를 할당하고, 중첩에 넣고, 큐비트를 측정하고, 큐비트를 다시 설정하고, 측정 결과를 반환합니다.
참고 항목
//
기호는 프로그램의 각 단계를 설명하는 선택적 메모를 나타냅니다.
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;
}
프로그램 실행
기본 제공 시뮬레이터에서 프로그램을 실행하려면 Main
작업 위에 있는 실행을 클릭하거나 Ctrl+F5를 누릅니다. 출력이 터미널의 디버그 콘솔에 표시됩니다.
결과는 One
또는 Zero
이며, 이는 진정한 임의 비트를 나타냅니다. 다른 결과를 보려면 프로그램을 다시 실행하면 됩니다.
다음 단원에서는 양자 난수 생성기의 두 번째 단계, 즉 여러 난수 비트를 결합하여 더 큰 숫자를 형성하는 단계를 구현합니다.