这段程序很有意思,从字面上翻译,不是求因式分解吗?
打开程序,有其中一段:
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调用了一个超级复杂的函数,不明白,为什么做得这么复杂,下次再细看。