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,如此直到商小于除数为止。
这个过程很巧妙。

 

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