Skip to content

Instantly share code, notes, and snippets.

@alan23273850
Last active April 1, 2024 14:57
Show Gist options
  • Save alan23273850/ed950142dae0cdf88440b2e7eb1cc36c to your computer and use it in GitHub Desktop.
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.
#!/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
@alan23273850
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment