coreutils5.0 factor.c源碼分析

coreutils5.0 factor.c源碼分析
今天接着想讀讀代碼行數少的程序,wc *.c | sort -n| more
這樣一選擇,想讀讀tee.c可,發現有-a選項,因爲想測試一下。
a.3中有內容
1
2
2
echo "hello" | ./tee -a 
發現tee.c居然沒有編譯成功。原來前面seq.c就編譯不成功,報floor錯誤,我想應該是加編譯選項-lm,可我把凡是用到gcc
的地方,都加了-lm,再sudo make一把,還是報錯。
心想,算了。還是讀讀factor.c吧,因爲修改makefile文件太難,而且也遠離了讀代碼的初心。
雙休日在家讀過一段代碼,再重複看,發現寫得很流暢。
./factor 30 40
如果有參數,就逐一把分解質因數的式子打印出來。
如果沒參數,象
./factor
此時,就調用do_stdin函數,從終端讀輸入後,再進行分解質因數。
在do_stdin函數中,有一個無窮循環,每次先從終端讀字串,再把字串轉爲數字,調用print_factors進行分解。

在print_factors函數中,調factor進行分析,把質因數的個數作爲函數返回值,質因數存儲的數組作爲參數傳出。

最核心的分解過程在factor中。這裏用到很高深的數學技巧。比如分解
30吧,先用2除,直到除不盡爲止,
30=2*15
再根據一個巧妙的數組,取下一個除數,作爲下一個質因數,再去除15,如此直到商小於除數爲止。
這個過程很巧妙。

 

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