# Installing necessary packages

`!pip install -U seaborn==0.10!pip install -U qiskit==0.19!pip install -U ipywidgets==7.5.1from IPython.display import clear_outputclear_output()`

# 1) Phase Oracle

`from qiskit.quantum_info import Operatorfrom qiskit import QuantumCircuitimport numpy as npdef phase_oracle(n, indices_to_mark, name = 'Oracle'):    # create a quantum circuit on n qubits    qc = QuantumCircuit(n, name=name)### WRITE YOUR CODE BETWEEN THESE LINES - START    oracle_matrix = np.identity(2**n)    for index_to_mark in indices_to_mark:        oracle_matrix[index_to_mark, index_to_mark] = -1### WRITE YOUR CODE BETWEEN THESE LINES - END# convert your matrix (called oracle_matrix) into an operator, and # add it to the quantum circuit    qc.unitary(Operator(oracle_matrix), range(n))        return qc`

# 2.) Diffusion Operator 𝑉

`def diffuser(n):        # create a quantum circuit on n qubits    qc = QuantumCircuit(n, name='Diffuser')        ### WRITE YOUR CODE BETWEEN THESE LINES - START    qc.h(range(n))    qc.append(phase_oracle(n,[0]),range(n))    qc.h(range(n))    ### WRITE YOUR CODE BETWEEN THESE LINES - END        return qc`

# 3.) Putting it all together

`def Grover(n, indices_of_marked_elements):        # Create a quantum circuit on n qubits    qc = QuantumCircuit(n, n)        # Determine r    r=int(np.floor(np.pi/4*np.sqrt(2**n/len          (indices_of_marked_elements))))    print(f'{n} qubits, basis states {indices_of_marked_elements}           marked, {r} rounds')        # step 1: apply Hadamard gates on all qubits    qc.h(range(n))        # step 2: apply r rounds of the phase oracle and the diffuser    for _ in range(r):        qc.append(phase_oracle(n, indices_of_marked_elements),                   range(n))        qc.append(diffuser(n), range(n))            # step 3: measure all qubits    qc.measure(range(n), range(n))      return qcmycircuit = Grover(6, [1, 42])mycircuit.draw(output='text')`
`from qiskit import Aer, executesimulator = Aer.get_backend('qasm_simulator')counts = execute(mycircuit, backend=simulator, shots=1000).result().get_counts(mycircuit)from qiskit.visualization import plot_histogramplot_histogram(counts)`