Python的3.5,194 181 169 152 149 146字节:
(感谢@ Sherlock9为2个字节!)
def r(o,c=0):
y=[[j%i for i in range(2,100)]for j in range(o+1)]
while 1:
c+=1;z=y[-1][:c]
if z not in[f[:c]for f in y[:-1]]:break
print(z)
完美运行,而且速度很快。计算100000
输出的最小余数序列[0, 1, 0, 0, 4, 5, 0, 1, 0, 10, 4, 4]
仅需约3秒钟。它甚至能够计算出输入1000000
(一百万),输出的顺序,[0, 1, 0, 0, 4, 1, 0, 1, 0, 1, 4, 1, 8, 10, 0, 9]
大约花费了60秒。
说明
基本上,这个函数首先创建一个列表的东西,y
与所有j mod i
地方j
的范围是每一个整数0=>7
(包括7)i
在上述范围内的每个整数0=>100
。然后,程序进入无限while
循环,将y
(y[:-1:]
)的第一个到倒数第二个子列表中每个子列表的相同数量的内容y[-1]
与list 的最后一个子列表()中的相同数量的项目进行比较y
。当子表y[-1]
是不同的比任何其他子列表,循环被打破了,并返回正确的最小剩余序列。
例如,如果输入为3,y
则将为:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], [1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]]
然后,当它进入while循环时,它将list中的每个子列表y[:-1:]
与sublist中相同数量的项目进行比较y[-1]
。例如,它将首先比较[[0],[1],[0]]
和[1]
。自从上次子列表中的其余部分y
,它将继续,然后比较[[0,0],[0,1],[0,2]]
和[1,0]
。由于[1,0]
现在不在y
该特定顺序的其余部分中,因此这是最小的提示序列,因此[1,0]
可以正确返回。