연습 1부 - 양자 임의 비트 생성기 만들기

완료됨

이전 단원에서는 Q# 프로그램의 기본 구성 요소에 대해 알아보았습니다. 이제 첫 번째 양자 프로그램인 진정한 난수를 생성하는 양자 프로그램을 작성할 준비가 되었습니다.

양자 난수 생성기는 두 단계로 빌드합니다. 이 단원에서는 단일 임의 비트를 생성하는 첫 번째 단계를 빌드합니다.

Q# 프로그램 만들기

  1. Visual Studio Code를 열고 파일>새 텍스트 파일을 선택하여 새 파일을 만듭니다.
  2. 파일을 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이며, 이는 진정한 임의 비트를 나타냅니다. 다른 결과를 보려면 프로그램을 다시 실행하면 됩니다.

다음 단원에서는 양자 난수 생성기의 두 번째 단계, 즉 여러 난수 비트를 결합하여 더 큰 숫자를 형성하는 단계를 구현합니다.