Last active
April 1, 2024 14:57
-
-
Save alan23273850/ed950142dae0cdf88440b2e7eb1cc36c to your computer and use it in GitHub Desktop.
An example of Shor's algorithm to show that a lot of feasible states cannot be measured.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import cmath, math | |
a = 7; print('a =', a) | |
N = 15; print('N =', N) | |
for ord in range(1, N): | |
if (a ** ord) % N == 1: | |
break | |
print('ord =', ord) | |
m = 2 ** math.ceil(math.log2(N*N)) | |
print('m =', m, '>= N^2') | |
amp = [[0 for _ in range(m)] for _ in range(m)] | |
for k in range(m): | |
for j in range(m): | |
amp[j][(a ** k) % N] += cmath.exp(2j * math.pi * j * k / m) / m | |
for k in range(1, m): # need to exclude k := 0 to avoid "x.append(p // 0)" | |
nonzero = False | |
for j in range(m): | |
if abs(amp[k][j]) > 1e-10: | |
nonzero = True | |
# print(k, j, amp[k][j]) | |
break | |
if True: #not nonzero: | |
p = k | |
q = m | |
x = [] | |
d = math.gcd(p, q) | |
p //= d | |
q //= d | |
while q != 1: | |
# print(p, q) | |
x.append(p // q) | |
p, q = q, p % q | |
x.append(p) | |
r = [0, 1] | |
for i in range(1, len(x)): | |
r.append(x[i] * r[-1] + r[-2]) | |
if r[-1] == ord: | |
if nonzero: | |
print('nonzero-prob. success k =', k) | |
else: | |
print('zero-prob. success k =', k) | |
break |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
a = 7
N = 15
ord = 4
m = 256 >= N^2
zero-prob. success k = 52
zero-prob. success k = 53
zero-prob. success k = 54
zero-prob. success k = 55
zero-prob. success k = 56
zero-prob. success k = 57
zero-prob. success k = 58
zero-prob. success k = 59
zero-prob. success k = 60
zero-prob. success k = 61
zero-prob. success k = 62
zero-prob. success k = 63
nonzero-prob. success k = 64
zero-prob. success k = 65
zero-prob. success k = 66
zero-prob. success k = 67
zero-prob. success k = 68
zero-prob. success k = 69
zero-prob. success k = 70
zero-prob. success k = 71
zero-prob. success k = 72
zero-prob. success k = 73
zero-prob. success k = 183
zero-prob. success k = 184
zero-prob. success k = 185
zero-prob. success k = 186
zero-prob. success k = 187
zero-prob. success k = 188
zero-prob. success k = 189
zero-prob. success k = 190
zero-prob. success k = 191
nonzero-prob. success k = 192
zero-prob. success k = 193
zero-prob. success k = 194
zero-prob. success k = 195
zero-prob. success k = 196
zero-prob. success k = 197
zero-prob. success k = 198
zero-prob. success k = 199
zero-prob. success k = 200
zero-prob. success k = 201
zero-prob. success k = 202
zero-prob. success k = 203
zero-prob. success k = 204