Project Euler 44

這道題真是遇到問題了……果然……我寫的慢了,超時了……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是兩兩組合……任意兩個~這個玩意太強大了……直接讓人快哭了……

算了……我也不明白爲什麼這麼快……哎……節哀……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章