非常繁琐而又意义不大的题。
要计算$S(n)$,需要考察第$n-2$、$n-1$、$n$、$n+1$、$n+2$共五行,这是因为若被考察的元素是i,那么i周围八个相邻位置的元素都有可能作为素数三元组的中心元素。
因此i在某个素数三元组中的条件是:i本身是素数,在其周围八个相邻位置的数中有某个数j是素数,且以j为中心的九宫格中至少有三个素数。
需要检验五行共5n个数的素性。第$n+2$行最后一个数是$(n+3)(n+2)/2$,先用筛法找出$\sqrt{(n+3)(n+2)/2}$以内的所有素数,用这些素数,再次使用筛法确定这5n个数的素性。
最后遍历第n行依次检验,结果是$322303240771079935$。
import math
a,b=5678027,7208785
target=int(math.sqrt((b+2)*(b+3)/2))+1
d=[0]*target
n=2
while n < target:
for i in range(n*n,target,n):
d[i]=d[i]+1
n+=1
while n < target and d[n]>0:
n=n+1
primes=[k for k in range(2,target) if d[k]==0]
r=0
for x in [a,b]:
m=(x+3)*(x+2)/2
n=(x-3)*(x-2)/2
d=[1]*(m-n)
for p in primes:
i=n+1
if i%p>0:
i=i+p-(i%p)
if i==p:
i=2*p
while i <= m:
d[i-n-1]=0
i+=p
s=sum(i for i in range(n+2*x,n+3*x-4) if d[i-n-1]==1 and any(d[[i-2*x+3,i-x+1,i,i+x,i+2*x+1][j]+k-n-1]==1 and sum(d[u+v-n-1] for u in [i-2*x+3,i-x+1,i,i+x,i+2*x+1][j-1:j+2] for v in [k-1,k,k+1])>=3 for j in [1,2,3] for k in [-1,0,1]))
r+=s
print r
|