繁花不似锦
问题出在你的线上if len(possible[i]) == 20:你的意思是说if len(possible) == 20:照原样,您的代码将继续运行-大概是因为循环计数如此之大,所以某些堆栈已填满...另外-尽管我不确定您要实现的目标,但是您的break命令位于最内层的循环中-因此您会中断该循环,然后再次执行此操作...并且由于长度仅恰好是20一次,因此您仍然被卡住。检查您的逻辑。例如,对代码进行以下小的更改将产生有用的输出(尽管我不知道它是否对您有用...但是它可能会给您一些想法):divisible = Truepossible = dict()for i in xrange(1, 100000000): for n in xrange(1, 21): if i%n != 0: divisible = False else: if i in possible: possible[i].append(n) else: possible[i] = [n] if len(possible) == 20: print i break else: print i, possible[i]输出:1 [1]2 [1, 2]3 [1, 3]4 [1, 2, 4]5 [1, 5]6 [1, 2, 3, 6]7 [1, 7]8 [1, 2, 4, 8]9 [1, 3, 9]10 [1, 2, 5, 10]11 [1, 11]12 [1, 2, 3, 4, 6, 12]13 [1, 13]14 [1, 2, 7, 14]15 [1, 3, 5, 15]16 [1, 2, 4, 8, 16]17 [1, 17]18 [1, 2, 3, 6, 9, 18]19 [1, 19]20编辑代码时要更仔细,我想您想做的是找到正好有20个因数的数字。因此你的情况是正确的。问题在于您还存储了所有其他术语-这是非常大量的列表。如果您只在最后一个数字之后(毕竟唯一的输出i就在休息之前),那么您真的不需要保留所有其他术语。下面的代码就是这样做的-它在我的计算机上运行良好,现在占用了最长的时间约20 MB的内存(但目前还没有答案...)divisible = Truepossible = [];biggest = 0;bigN = 100000000;for i in xrange(1, bigN): for n in xrange(1, 21): if i%n != 0: divisible = False else: if len(possible) > 0: possible.append(n) else: possible = [n] if len(possible) >= 20: print i print possible break else: if bigN < 1000: print i, possible; # handy for debugging if biggest < len(possible): biggest = len(possible); possible = []计算您正在做的事情的“手动”方法是找到所有1到20的数字的素数;计算每个中出现质数的最大次数;并拿走他们的产品:2 = 23 = 34 = 225 = 56 = 2 37 = 78 = 2229 = 3310 = 2 511 = 1112 = 22 313 = 1314 = 2 715 = 3 516 = 222217 = 1718 = 2 3319 = 1920 = 22 5答案:(2 * 2 * 2 * 2)*(3 * 3)* 5 * 7 * 11 * 13 * 17 * 19 = 232792560