演算法筆記 2019 11 1

2022-09-04 20:45:08 字數 888 閱讀 3155

因為影響生成0的是2和5的倍數,顯然這些數的分解數含2的因子多於含5的因子,因此我們可以得出乙個結論,n!的分解數中有多少個因子5,末尾就有多少個0,所以實際上就是去求n裡面有多少個5。

採用層層剝皮法去求,先以5為步長,執行一次迴圈,求出含5的個數(個數為n/5取整),再求出含25的個數(因為乙個數可以被5整除2次),有個問題還需要注意,25,125也是5的倍數,125也是25的倍數……一直到步長大於或等於n退出迴圈。

例求2016!後面0的個數呢?

同樣按照上面的方法。

5的倍數個數為:

2016/5 = 403個

25的倍數個數為:

403/5 = 80個

125的倍數的個數為:

80/5 = 16個

625的倍數的個數為: 16/5 = 3個。

所以可以得出2016!後面0的個數為:403+80+16+3 = 502個.

**如下

int

zerotrail

(int n)

//計算n!的0的個數

return count;

}

演算法分析:可以使用常規的二分法求解,也可以考慮追趕法求解。

追趕法:不斷比較得出min(a-n/d),在n/d>a時d++,相反則n++,即d和n的追趕問題。

while

(n <= l && d <= l)

//在o~這個範圍之內

if(cha >0)

//後面小了,應當增大分子

n++;else

d++;//否則減小分母

}printf

("%d %d\n"

, ansn, ansd)

;

ZUST 2019111 悲傷數字(思維 二叉樹)

題意 用4,9按大小構造數字序列a為 4,9,44,49,94,99.定義499為1z,輸入k 1 k 1e8 輸出第kz個數字。比如k 1,輸出為第499個數字,99994944。題解 因為只有4,9兩個數字,我們很容易聯想到0,1,從而想到二叉樹。我們這樣構造二叉樹,結點x的左兒子的編號為0x,...

《演算法筆記》Dijkstra演算法筆記

今日在華農終於接近完成閱讀演算法筆記,有點點成就感,做下dijkstra跟dfs演算法結合的筆記 簡單狀態 純dijkstra include include include define inf 1000000000 using namespace std const int maxn 1010 ...

回溯 皇后 演算法筆記 演算法筆記

分治演算法 線性時間選擇 o n 33 隨機線性選擇 偽 o n int partition type a,int p,int r return table n 1 w 1 main function else else lowcost i 0 for int i 1 i n i int temp ...