找到四个学生的一组解,哈哈
802,1418,1838
2162,2458,2722
2729,2969,3191
6049,6161,6271
差值是1367520
搜了10000以内。下面python code里面,如果用上限10000,占用内存17G。如果你电脑内存较小,可以选个较小数字来跑。
diffDict={}
itemDict={}
x=[item*item for item in range(1,10000)]
for i in range(len(x)):
for j in range(i+1,len(x)):
diff=x[j]-x[ i]
if diff in diffDict:
diffDict[diff].append((i+1,j+1))
itemDict[diff].append(i+1)
itemDict[diff].append(j+1)
else:
diffDict[diff]=[(i+1,j+1)]
itemDict[diff]=[ i+1]
itemDict[diff].append(j+1)
寻找三个学生的答案:
[item for item in itemDict if len(itemDict[item])-len(set(itemDict[item])) >= 3]
[43680, 2825760, 3360, 174720, 8168160, 11303040, 393120, 13440, 698880, 7862400, 1092000, 30240, 1572480, 2140320, 53760, 1149120, 2795520, 3538080, 84000, 4368000, 3024000, 5285280, 120960, 6289920, 7381920, 164640, 2328480, 8561280, 9828000, 215040, 4596480, 11182080, 5987520, 12623520, 272160, 14152320, 15768480, 336000, 17472000, 19262880, 127680, 406560, 12096000, 21141120, 3659040, 483840, 665280, 10342080, 567840, 658560, 9313920, 4116000, 4583040, 5470080, 756000, 860160, 971040, 4514400, 1088640, 3192000, 4851840, 1212960, 1344000, 1481760, 20956320, 510720, 1626240, 1777440, 6726720, 14636160, 1935360, 2661120, 8848224, 2100000, 2271360, 2449440, 2634240, 16464000, 18332160, 15449280, 1367520, 3228960, 3440640, 8739360, 3884160, 18057600, 4354560, 4599840, 12768000, 19407360, 5110560, 5376000, 5648160, 5927040, 6212640, 2042880, 6504960, 6804000, 7109760, 7422240, 7741440, 8067360, 35392896, 7993440, 8400000, 15536640, 9085440, 9438240, 9797760, 10164000, 10536960, 10916640, 11696160, 3756480, 12502560, 12915840, 13335840, 13762560, 14196000, 10311840, 15083040, 15996960, 16937760, 17418240, 17905440, 18399360, 18900000, 1145760, 6256320, 19921440, 20442240, 8171520, 12307680, 15025920]
寻找四个学生的答案:
>>>[item for item in itemDict if len(itemDict[item])-len(set(itemDict[item])) >= 4]
[1367520]
四个学生的答案的情况:
>>>[ i for i in itemDict[1367520] if itemDict[1367520].count(i) > 1]
[1418, 1418, 2458, 2458, 2969, 2969, 6161, 6161]
>>>[item for item in diffDict[1367520] if item[0] in [1418, 2458, 2969, 6161] or item[1] in [1418, 2458, 2969, 6161]]
[(802, 1418), (1418, 1838), (2162, 2458), (2458, 2722), (2729, 2969), (2969, 3191), (6049, 6161), (6161, 6271)]
还没想好怎么搜长度为4的数列。