1. 程式人生 > >《程式設計之美》2.21 只考加法的面試題

《程式設計之美》2.21 只考加法的面試題

性質一可以通過替換來證明,假設當前的最大序列個數不滿足性質一,設第一個不滿足性質的兩個指數為a和b,滿足a<b。由於序列個數為(j+1) ∙ (k+1) ∙…,我們通過將兩個質因子的指數交換可以獲得相同的序列個數。此外,由於前面的質因子小,交換之後總的乘積會變小,從而可能產生一個更大的指數,使序列個數更多。通過這樣依次交換不滿足性質的相鄰兩個指數,最終我們會得到滿足性質一併且使序列個數最多的指數序列。這也與經驗相吻合,要想使序列個數儘可能多,則正整數必須儘量少含有大的質因子。對於性質二,當正整數只包含質因子3時,質因子之和最大,此時為40。而當正整數含有越多較大的質因子時,則質因子之和就越小,在滿足性質一的前提下,當正整數等於3 ∙5 ∙…∙53時,和最小,此時共有15個質因子,含有的序列個數為2^15-1。該正整數含有的序列個數已經非常多,但不一定是最多,例如將53替換為27,則序列個數升為5∙2^13-1。如果我們繼續替換,將3^4 ∙5 ∙…∙47變為3^3 ∙5^2 ∙…∙47,則序列個數又升為6∙2^13-1。該數可能已經是具有最多序列的數,但是要想獲得準確的最大序列個數,我們還需要利用性質一二去遍歷所有可能的情況。如果按照第二種理解方式,則我們可以證明具有最多項的數N的最多項必從1開始。假設最多項不從1開始而是從s(s>1)開始,則我們可以將該最多項的每一項均減去s-1,則最多項等價於從1開始的最多項,也即我們至少可以構造和之前的最多項一樣長的新序列。此外,由於每一項均減少了s-1,如果此時減少的和大於最多項的最大項,我們還可以新增新的項到最多項的末尾,產生更長的最多項。