gnu coreutils factor.c源码分析
2018-03-06 09:57
381 查看
这段程序很有意思,从字面上翻译,不是求因式分解吗?
打开程序,有其中一段:
d = 2;
do
{
q = n / d;
while (n == q * d)
{
assert (n_factors < max_n_factors);
factors[n_factors++] = d;
n = q;
q = n / d;
}
d += *(w++);
if (w == WHEEL_END)
w = WHEEL_START;
}
while (d <= q);
我原来就喜欢这些简单的数字编程,这看上去就是进行因式分解。
真有意思。不过
d += *(w++);
这句没弄明白,不明白这个增量是何意思,而且后面,还好象有循环一样。
if (w == WHEEL_END)
w = WHEEL_START;
所以还是快速的浏览。
先从头扫到尾,再从main.c开始看。
if (argc == 1)
fail = do_stdin ();
else
{
int i;
for (i = 1; i < argc; i++)
fail |= print_factors (argv[i]);
}
这段话,如果不带选项,就对标准输入中的数据分解,否则把传入的参数逐个分解。
我在linux下把这个命令执行一下,果然如此。
再看print_factors
先把传入的字串转为数字
if (xstrtoumax (s, NULL, 10, &n, "") != LONGINT_OK)
再就进行分解
n_factors = factor (n, MAX_N_FACTORS, factors);
而分解因式的那段为何对增量要循环呢???真是不可理解。
而且,do_stdin调用了一个超级复杂的函数,不明白,为什么做得这么复杂,下次再细看。
打开程序,有其中一段:
d = 2;
do
{
q = n / d;
while (n == q * d)
{
assert (n_factors < max_n_factors);
factors[n_factors++] = d;
n = q;
q = n / d;
}
d += *(w++);
if (w == WHEEL_END)
w = WHEEL_START;
}
while (d <= q);
我原来就喜欢这些简单的数字编程,这看上去就是进行因式分解。
真有意思。不过
d += *(w++);
这句没弄明白,不明白这个增量是何意思,而且后面,还好象有循环一样。
if (w == WHEEL_END)
w = WHEEL_START;
所以还是快速的浏览。
先从头扫到尾,再从main.c开始看。
if (argc == 1)
fail = do_stdin ();
else
{
int i;
for (i = 1; i < argc; i++)
fail |= print_factors (argv[i]);
}
这段话,如果不带选项,就对标准输入中的数据分解,否则把传入的参数逐个分解。
我在linux下把这个命令执行一下,果然如此。
再看print_factors
先把传入的字串转为数字
if (xstrtoumax (s, NULL, 10, &n, "") != LONGINT_OK)
再就进行分解
n_factors = factor (n, MAX_N_FACTORS, factors);
而分解因式的那段为何对增量要循环呢???真是不可理解。
而且,do_stdin调用了一个超级复杂的函数,不明白,为什么做得这么复杂,下次再细看。
相关文章推荐
- gnu coreutils users.c源码分析
- gnu coreutils rm.c 源码分析
- gnu coreutils echo.c 源码分析
- gnu coreutils mkfifo.c源码分析
- gnu coreutils nice.c源码分析
- gnu coreutils mkdir.c源码分析
- gnu coreutils utime.c 源码分析
- gnu coreutils chgrp.c 源码分析
- gnu coreutils tty.c源码分析
- gnu coreutils4.5.1 fold.c源码解读
- gnu coreutils4.5.1 chroot .c源码解读
- gnu coreutils4.5.1 true.c源码解读
- gnu coreutil源码分析nl.c
- gnu coreutils4.5.1 link.c源码解读
- gnu coreutils4.5.1 unlink.c源码解读
- spark core源码分析2 master启动流程
- org.springframework.core.io.Resource接口源码分析
- jQuery 2.0.3 源码分析core - 整体架构
- [HGE]-源码分析-4 core里的demo和graphics(a)
- hadoop-common源码分析之-WritableUtils