Spaces:
Configuration error
Configuration error
| #!/usr/bin/env python3 | |
| """ | |
| Q-GoH: Quantum Goldbach Hypothesis β one-file infinity runner | |
| """ | |
| import itertools, math, sympy, time | |
| from qiskit import QuantumCircuit | |
| from qiskit_aer import AerSimulator | |
| def mask(max_val): | |
| return [1 if sympy.isprime(i) else 0 for i in range(max_val + 1)] | |
| def grover_once(N): | |
| n = math.ceil(math.log2(N // 2 + 1)) | |
| qc = QuantumCircuit(2 * n, 2 * n) | |
| qc.h(range(2 * n)) | |
| m = mask(N // 2) | |
| # oracle flags: p,q prime and p+q=N | |
| for val, is_prime in enumerate(m): | |
| if is_prime: | |
| ctrl = [i for i in range(n) if not (val >> i) & 1] | |
| if ctrl: qc.x(ctrl) | |
| qc.mcx(list(range(n)), 0) # flag p | |
| if ctrl: qc.x(ctrl) | |
| ctrl = [i + n for i in range(n) if not (val >> i) & 1] | |
| if ctrl: qc.x(ctrl) | |
| qc.mcx(list(range(n, 2 * n)), 1) # flag q | |
| if ctrl: qc.x(ctrl) | |
| qc.measure_all() | |
| counts = AerSimulator().run(qc, shots=64).result().get_counts() | |
| for bits, _ in counts.items(): | |
| p = int(bits[:n], 2) | |
| q = int(bits[n:], 2) | |
| if sympy.isprime(p) and sympy.isprime(q) and p + q == N: | |
| return p, q | |
| return None | |
| def main(): | |
| for N in itertools.count(4, 2): | |
| t0 = time.perf_counter() | |
| pair = grover_once(N) | |
| dt = time.perf_counter() - t0 | |
| print(f"{N} = {pair[0]} + {pair[1]} (found in {dt:.3f}s)" if pair | |
| else f"{N} β ({dt:.3f}s)") | |
| if __name__ == "__main__": | |
| main() | |