比较典型的并查集问题,套用模板即可解决,结果是$2325629$。
注:以下为Python3代码,因带cache装饰器的记忆化搜索是Python3的新特性。
from functools import *
@cache
def s(k):
return (100003-200003*k+300007*k*k*k)%1000000 if k<=55 else (s(k-24)+s(k-55))%1000000
root=list(range(1000001))
size=[1]*1000001
def find(x):
if root[x]!=x:
root[x]=find(root[x])
return root[x]
def merge(x, y):
x,y=find(x),find(y)
if x!=y:
if size[x] < size[y]:
x,y=y,x
root[y]=x
size[x]+=size[y]
pm=524287
k=err=0
while size[find(pm)] < 990000:
k+=2
if s(k)!=s(k-1):
merge(s(k),s(k-1))
else:
err+=1
print(k//2-err)
|