这道题真是遇到问题了……果然……我写的慢了,超时了……TLE……好久没用这词了~
注意……这个超时,是指超过了1min……擦……
题目很简单,就是让你找最小的D出来~
哎……python的in操作我估计是很慢的……因为根本不知道你的list是否有序,那么就一个一个找吧……
def main():
min = 2147483647
p = [n*(3*n-1)//2 for n in range(1, 3000)]
length = len(p)
for i in range(length):
for j in range(i+1, length):
if (p[i]+p[j]) in p and (p[j]-p[i]) in p:
if (p[j]-p[i]<min):
min = p[j] - p[i]
print(min)
if __name__ == '__main__':
main()
我写的……多么质朴……
好……上个秒出的大神的……
from itertools import *
from math import *
from operator import *
def pentagonal(n):
return n*(3*n-1)//2
def main():
pentagonals = set(pentagonal(n) for n in range(1, 3000))
c = combinations(pentagonals, 2)
for p in c:
if add(*p) in pentagonals and abs(sub(*p)) in pentagonals:
print(abs(sub(*p)))
if __name__ == "__main__":
main()
实在是不敢相信……实在是秒出……
这里的combinations是两两组合……任意两个~这个玩意太强大了……直接让人快哭了……
算了……我也不明白为什么这么快……哎……节哀……