【題目】小明很喜歡數(shù)學(xué),有一天他在做數(shù)學(xué)作業(yè)時(shí),要求計(jì)算出9~16的和,他馬上就寫出了正確答案是100窟却。但是他并不滿足于此,他在想究竟有多少種連續(xù)的正數(shù)序列的和為100(至少包括兩個(gè)數(shù))。沒多久,他就得到另一組連續(xù)正數(shù)和為100的序列:18,19,20,21,22∩肽妫現(xiàn)在把問題交給你,你能不能也很快的找出所有和為S的連續(xù)正數(shù)序列? Good Luck!
【思路】
S除奇數(shù)時(shí)夸赫,如果余數(shù)為0時(shí),存在這樣的序列咖城;
S除偶數(shù)時(shí)茬腿,如果余數(shù)為偶數(shù)的一半呼奢,則存在這樣的序列;
需要確保序列的最左端(最小數(shù))值大于0.
【代碼】
res = []
for div in range(2,int(math.sqrt(tsum*2))+1):
if (div%2==0 and tsum%div == div/2) or (div%2==1 and tsum%div == 0):
start = tsum//div - div//2 + 1 if div%2==0 else tsum//div - div//2
res.append(list(range(start, tsum//div + div//2 + 1)))
return sorted(res)