연습 - 양자 임의 비트 생성기 만들기
일반 컴퓨터에서는 난수가 아니라 의사 난수를 생성합니다. 의사 난수 생성기는 시드라고 하는 일부 초기값을 기준으로 결정적 숫자 시퀀스를 생성합니다. 임의 값을 보다 정확하게 근사하기 위해 이 시드는 CPU 클록의 현재 시간인 경우가 많습니다.
반면 양자 컴퓨터는 실제로 난수를 생성할 수 있습니다. 중첩에서 큐비트의 측정이 확률적 프로세스이기 때문입니다. 측정 결과는 임의이며 결과를 예측할 방법이 없습니다. 이것이 양자 난수 생성기의 기본 원칙입니다.
QRNG 문제 정의
먼저 기저 상태(예: 0)의 큐비트로 시작합니다. QRNG의 첫 번째 단계는 H
연산을 사용하여 큐비트를 동일 중첩으로 설정하는 것입니다. 이 상태를 측정하면 0 또는 1이 반환되며, 각 결과의 확률은 50%입니다. 이 비트의 값은 진 난수이며 측정 후에 무엇을 얻을 지 알 수 있는 방법이 없습니다. 그러나 이 동작을 사용하여 더 큰 난수를 생성하려면 어떻게 해야 할까요?
프로세스를 4번 반복하여 다음과 같은 이진수 시퀀스를 생성한다고 가정하겠습니다.
$${0, 1, 1, 0}$$
이러한 비트를 비트 문자열로 연결하거나 결합하면 더 큰 숫자를 형성할 수 있습니다. 이 예제에서 비트 시퀀스 ${0110}$는 10진수 6과 같습니다.
$${0110_{\ binary} \equiv 6_{\ decimal}}$$
이 프로세스를 여러 번 반복하면 여러 비트를 결합하여 큰 숫자를 구성할 수 있습니다.
양자 난수 생성기는 두 단계로 빌드합니다. 이 단원에서는 단일 임의 비트를 생성하는 첫 번째 단계를 빌드합니다.
이렇게 하려면 다음을 수행합니다.
- 큐비트를 할당합니다.
H
작업을 적용하여 큐비트를 중첩에 넣습니다.- 큐비트를 측정하여 임의 비트를 가져옵니다.
- 큐비트를 0 상태로 다시 설정합니다.
Q# 프로그램 만들기
Visual Studio Code를 열고 새 텍스트 파일 파일을 > 선택하여 새 파일을 만듭니다.
파일을
RandomNumberGenerator.qs
로 저장합니다. 이 파일에는 프로그램에 대한 Q# 코드가 포함됩니다.다음 코드를 파일에 복사합니다
RandomNumberGenerator.qs
.namespace QuantumRandomNumberGenerator { @EntryPoint() operation GenerateRandomBit() : Result { // Allocate a qubit. use q = Qubit(); // Set the qubit into superposition of 0 and 1 using the Hadamard H(q); // At this point the qubit `q` has 50% chance of being measured in the // |0〉 state and 50% chance of being measured in the |1〉 state. // Measure the qubit value using the `M` operation, and store the // measurement value in the `result` variable. let result = M(q); // Reset qubit to the |0〉 state. // Qubits must be in the |0〉 state by the time they are released. Reset(q); // Return the result of the measurement. return result; } }
팁
최신 QDK에는 Q# 및 양자 컴퓨팅에 대해 자세히 알아보는 데 사용할 수 있는 기본 제공 Q# 샘플 집합이 포함되어 있습니다. 샘플을 보려면 새 Q# 파일을 열고 입력 sample
한 다음 옵션 목록에서 보려는 샘플을 선택합니다. 이 단원의 "임의 비트 샘플"에서 Q# 코드를 찾을 수 있습니다.
Q# 코드 탐색
- 작업을 마우스로
H
가리키면 정의에 대한 간단한 요약이 표시됩니다. - 작업 앞에 커서를
H
놓고 마우스 오른쪽 단추를 클릭하고 정의로 이동을 선택합니다. 그러면 함수에 대한 표준 라이브러리 코드의 읽기 전용 보기가 열립니다.
로컬로 프로그램 실행
- 새 터미널인 터미널 > 새 터미널을 엽니다.
- 기본 제공 시뮬레이터에서 로컬로 프로그램을 테스트하려면 오른쪽 위에 있는 재생 아이콘 드롭다운에서 Q# 파일 실행을 선택하거나 Ctrl+F5를 누릅니다. 출력이 터미널의 디버그 콘솔에 표시됩니다.
- 프로그램을 다시 실행하여 다른 결과를 확인합니다.
다음 단원에서는 양자 난수 생성기의 두 번째 단계를 구현합니다. 여러 임의 비트를 결합하여 더 큰 숫자를 형성합니다.