Security_Dragon 2024-05-14 11:48 采纳率: 100%
浏览 31
已结题

有关Qiskit的问题!!

问问各位佬!我在Jupyter中使用qiskit实现Shor算法时遇见了一个问题!
这是我第一次使用到涉及量子计算的内容。
按照网上各类方法尝试了个遍都没有找到能够解决这个问题的答案T-T
谢谢!
以下这段代码总是报错找不到Aer模块,可是我已经在Anaconda中安装了qiskit的Aer模块


```python
from qiskit import QuantumCircuit, Aer, transpile, assemble
#from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
from math import gcd
from numpy.random import randint
import numpy as np

# 定义一个函数来实现Shor算法
def shor(n):
    # 创建一个量子电路
    qc = QuantumCircuit(10, 10)

    # 初始化量子比特
    for i in range(9):
        qc.h(i)

    # 应用Shor算法的主要步骤
    # ...(省略了具体的量子门操作)

    # 测量量子比特
    qc.measure(range(9), range(9))

    # 使用模拟器运行量子电路
    simulator = Aer.get_backend('qasm_simulator')
    compiled_circuit = transpile(qc, simulator)
    qobj = assemble(compiled_circuit, shots=1000)
    result = simulator.run(qobj).result()
    counts = result.get_counts(qc)

    # 分析结果并返回因子
    for key, value in counts.items():
        if value > 500:
            factors = [int(key[i:i+3], 2) for i in range(0, len(key), 3)]
            return factors

# 选择一个随机的素数作为输入
input_prime = randint(100, 1000)
while not all(gcd(input_prime, i) == 1 for i in range(2, int(np.sqrt(input_prime)) + 1)):
    input_prime = randint(100, 1000)

# 使用Shor算法找到输入素数的因子
factors = shor(input_prime)
print("输入素数:", input_prime)
print("找到的因子:", factors)

#c:\users\86135\.conda\envs\'name'\lib\site-packages (0.14.1)

报错的具体内容如下:
ImportError: cannot import name 'Aer' from 'qiskit' (C:\Users\86135\AppData\Roaming\Python\Python39\site-packages\qiskit\__init__.py)

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/30f3b687282e44ab8c1128d9203acd93.png "#left")

我在Anaconda中装的Aer模块具体信息如下:

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/774729c881df4f44b12fd7940a0d6fc2.png "#left")

  • 写回答

3条回答 默认 最新

  • Security_Dragon 2024-05-15 18:47
    关注

    OK,已经找到问题所在了。是因为版本不同导致语句无法识别,按照版本要求修改一下代码表达就可以了

    
    ```python
    from qiskit import QuantumCircuit, transpile, assemble
    from qiskit_aer import AerSimulator
    from qiskit.visualization import plot_histogram
    from math import gcd
    from numpy.random import randint
    import numpy as np
    
    def qft(circuit, n):
        for i in range(n):
            for j in range(i):
                #circuit.rz(-np.pi/(2 ** (i - j)), i, j)
                circuit.rz(-np.pi/(2 ** (i - j)), i)
            circuit.h(i)
    
    def shor(n):
        # 创建一个量子电路
        qc = QuantumCircuit(int(np.log2(n)) + 1, int(np.log2(n)) + 1)
    
        # 初始化量子比特
        for i in range(int(np.log2(n))):
            qc.h(i)
    
        # 应用Shor算法的主要步骤
        qft(qc, int(np.log2(n)))
        qc.x(int(np.log2(n)))
    
        # 测量量子比特
        qc.measure(range(int(np.log2(n))), range(int(np.log2(n))))
    
        # 使用模拟器运行量子电路
        simulator = AerSimulator()
        compiled_circuit = transpile(qc, simulator)
        qobj = assemble(compiled_circuit, shots=1000)
        result = simulator.run(compiled_circuit).result()
        counts = result.get_counts(qc)
    
        # 分析结果并返回因子
        for key, value in counts.items():
            if value > 500:
                factors = [int(key[i:i+3], 2) for i in range(0, len(key), 3)]
                return factors
        return None
    
    # 选择一个随机的素数作为输入
    input_prime = randint(100, 1000)
    while not all(gcd(input_prime, i) == 1 for i in range(2, int(np.sqrt(input_prime)) + 1)):
        input_prime = randint(100, 1000)
    
    # 使用Shor算法找到输入素数的因子
    factors = shor(input_prime)
    print("输入素数:", input_prime)
    print("找到的因子:", factors)
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)