Skip to content

Instantly share code, notes, and snippets.

@user140242
Last active July 10, 2022 15:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save user140242/712fd20e57287d47c8e51a03cb50842a to your computer and use it in GitHub Desktop.
Save user140242/712fd20e57287d47c8e51a03cb50842a to your computer and use it in GitHub Desktop.
Goldbach function
import math
import numpy as np
def goldbach(n):
# for n>17 goldbach function returns vector G with G[i]=g(2i) for 2<=i<=n/2
Primes5mod6 =np.ones((n//6+1), dtype=bool)
Primes1mod6 =np.ones((n//6+1), dtype=bool)
imax=math.isqrt(n)//6+1
for i in range(1,imax+1):
if Primes5mod6[i]:
Primes5mod6[6*i*i::6*i-1]=[False]
Primes1mod6[6*i*i-2*i::6*i-1]=[False]
if Primes1mod6[i]:
Primes5mod6[6*i*i::6*i+1]=[False]
Primes1mod6[6*i*i+2*i::6*i+1]=[False]
G=[0,0,1,1,1,2]
for ni in range(12,n-3,6):
k=ni//6
G.append(np.count_nonzero(Primes5mod6[1:k]&Primes1mod6[k-1:0:-1]))
G.append(np.count_nonzero(Primes1mod6[1:math.floor(k/2)+1]&Primes1mod6[k-1:math.ceil(k/2)-1:-1])+Primes5mod6[k])
G.append(np.count_nonzero(Primes5mod6[1:math.floor((k+1)/2)+1]&Primes5mod6[k:math.ceil((k+1)/2)-1:-1])+Primes1mod6[k])
return G
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment