CCCCCC位于2.124 * 10 ^ 519。
精确的指标是2124002227156710537549582070283786072301315855169987260450819829164756027922998360364044010386660076550764749849261595395734745608255162468143483136030403857241667604197146133343367628903022619551535534430377929831860918493875279894519909944379122620704864579366098015086419629439009415947634870592393974557860358412680068086381231577773140182376767811142988329838752964017382641454691037714240414750501535213021638601291385412206075763857490254382670426605045419312312880204888045665938646319068208885093114686859061215
经过3.5小时的搜索,使用下面的(旧版本)代码通过res找到了。
在该索引周围,字符串为: ...BCCBCBCCCBCCCCCCBCCB...
要进行验证,请将下面代码中的指示行更改为从2946开始,而不是5。验证需要20秒。
更新:改进程序。旧程序搜索的位置超出了所需数量的10倍。
新版本CCCCCC
仅需33分钟即可找到。
代码的工作方式:基本上,我仅查看与增量字符串结尾相对应的区域,并通过递归地查看原始字符串来计算字母。请注意,它使用了一个备忘录表,它可能会占用您的内存。如有必要,在备忘录表的长度上设置一个上限。
import time
import sys
sys.setrecursionlimit(4000)
ULIMIT=4000
end_positions=[]
current_end=2
while len(end_positions)<ULIMIT+3:
end_positions.append(current_end)
next_end=((current_end+1)*3+1)//2-1
current_end=next_end
memo={}
def find_letter(pos):
if pos in memo:
return memo[pos]
if pos<3:
return 'ABC'[pos]
for end_num in range(len(end_positions)-1):
if pos>end_positions[end_num] and pos<=end_positions[end_num+1]:
delta=end_positions[end_num+1]-end_positions[end_num]
if len(memo)>5*10**6:
return find_letter(pos-delta)
memo[pos]=find_letter(pos-delta)
return memo[pos]
time.clock()
for end_num in range(5,ULIMIT+1): # This line.
diff = 1 # Because end_num is guaranteed to be a C
while True:
last_letter=find_letter(end_positions[end_num]+diff)
if not last_letter=='C':
break
diff+=1
if end_num%100==0:
pos_str=str(end_positions[end_num])
print(end_num,'%s.%s*10^%i'%(pos_str[0],pos_str[1:5],len(pos_str)-1),
len(memo),diff,time.clock())
if diff>=6:
print(end_num,end_positions[end_num],diff,time.clock())
当前搜索的最大值:4000次迭代
CCCCCC
在迭代时发现:2946
CCCCC
在索引27308中找到了,但是后来听起来您好像不知道它第一次出现的位置。你是说CCCCCC
吗