Skip to main content
IBM Quantum Platform

HRSCumulativeMultiplier

class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')

GitHub

베이스: Multiplier

두 입력 레지스터의 곱셈을 제자리에 저장하는 곱셈 회로입니다.

Circuit은 [1의] 접근 방식을 사용합니다. 예를 들어, 기본 가산기를 사용하여 3쿼비트 크기의 레지스터 2개에서 비모듈식 곱셈을 수행하는 승수 회로는 다음과 같습니다(여기서 AdderCDKMRippleCarryAdder 을 나타냅니다):

  a_0: ────■─────────────────────────

  a_1: ────┼─────────■───────────────
           │         │
  a_2: ────┼─────────┼─────────■─────
       ┌───┴────┐┌───┴────┐┌───┴────┐
  b_0: ┤0       ├┤0       ├┤0       ├
       │        ││        ││        │
  b_1: ┤1       ├┤1       ├┤1       ├
       │        ││        ││        │
  b_2: ┤2       ├┤2       ├┤2       ├
       │        ││        ││        │
out_0: ┤3       ├┤        ├┤        ├
       │        ││        ││        │
out_1: ┤4       ├┤3       ├┤        ├
       │  Adder ││  Adder ││  Adder │
out_2: ┤5       ├┤4       ├┤3       ├
       │        ││        ││        │
out_3: ┤6       ├┤5       ├┤4       ├
       │        ││        ││        │
out_4: ┤        ├┤6       ├┤5       ├
       │        ││        ││        │
out_5: ┤        ├┤        ├┤6       ├
       │        ││        ││        │
aux_0: ┤7       ├┤7       ├┤7       ├
       └────────┘└────────┘└────────┘

이 회로의 곱셈은 입력 레지스터 중 하나를 사용하여 일련의 시프트 덧셈을 수행하고 다른 입력 레지스터의 큐비트는 가산기의 제어 큐비트 역할을 하는 고전적인 접근 방식으로 구현됩니다.

관련 참조

MultiplierGate 객체는 이 회로 클래스처럼 곱셈 연산을 나타내지만, 컴파일러가 문맥에 따라 최적의 분해 방식을 선택할 수 있도록 합니다. 구체적인 구현 방식은 을 통해 HLSConfig설정할 수 있으며, 예를 들어 이 회로는 을 통해 선택할 수 Multiplier=["cumulative_h18"] 있습니다.

참조 자료:

[1] Häner et al, 산술을 위한 양자 회로 최적화, 2018. arXiv:1805.12445

매개변수

  • num_state_qubits (int) – 상태 a|a\rangle 또는 b|b\rangle 에 대한 입력 레지스터의 큐비트 수. 두 입력 레지스터는 동일한 수의 큐비트를 가져야 합니다.
  • num_result_qubits (int | None) – 출력을 제한할 결과 큐비트 수입니다. 결과 큐비트 수가 nn 인 경우 곱셈 모듈러 2n2^n 를 수행하여 출력을 지정된 큐비트 수로 제한합니다. 기본값은 2 * num_state_qubits 으로 두 입력값의 곱셈으로 가능한 모든 결과를 나타냅니다.
  • adder (QuantumCircuit | None) – 곱셈 연산을 수행하는 데 사용되는 반가산기 회로. 더하기 연산자가 지정되지 않은 경우, 기본값으로 CDKMRippleCarryAdder가 사용됩니다.
  • name (str) – 회로 개체의 이름입니다.

레이즈

NotImplementedError - num_result_qubits 이 기본값이 아니고 사용자 지정 가산기가 제공된 경우.


속성

name

유형: str

사람이 읽을 수 있는 회로의 이름입니다.

예제

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.