因子表

2012年5月8日

在计算机出现之前,大多数计算都是借助于表格:对数表、正弦表等等。这些表格无处不在,不可或缺,而且错误百出。需要对数字进行因子分解的数字理论家使用了数字的最小素因子表。最古老的这样的表可以追溯到1603年(它包含了所有数字中最小的素因子,达到750),而新的表则是在1909年德里克·N·莱默(Derrick N.Lehmer)的最小素因子表达到1000万时才开始构建的(他是德里克·H·莱默的父亲);Maarten Bullynck给出历史这是一个大表格中的示例页面,显示了所有小于1000的数字中的最小素因子;可被2和5整除的数字被省略,素数被跳过:

      0    1    2    3    4    5    6    7    8    9
 1        --    3    7   --    3   --   --    3   17
 3   --   --    7    3   13   --    3   19   11    3
 7   --   --    3   --   11    3   --    7    3   --
 9    3   --   11    3   --   --    3   --   --    3
11   --    3   --   --    3    7   13    3   --   --
13   --   --    3   --    7    3   --   23    3   11
17   --    3    7   --    3   11   --    3   19    7
19   --    7    3   11   --    3   --   --    3   --
21    3   11   13    3   --   --    3    7   --    3
23   --    3   --   17    3   --    7    3   --   13
27    3   --   --    3    7   17    3   --   --    3
29   --    3   --    7    3   23   17    3   --   --
31   --   --    3   --   --    3   --   17    3    7
33    3    7   --    3   --   13    3   --    7    3
37   --   --    3   --   19    3    7   11    3   --
39    3   --   --    3   --    7    3   --   --    3
41   --    3   --   11    3   --   --    3   29   --
43   --   11    3    7   --    3   --   --    3   23
47   --    3   13   --    3   --   --    3    7   --
49    7   --    3   --   --    3   11    7    3   13
51    3   --   --    3   11   19    3   --   23    3
53   --    3   11   --    3    7   --    3   --   --
57    3   --   --    3   --   --    3   --   --    3
59   --    3    7   --    3   13   --    3   --    7
61   --    7    3   19   --    3   --   --    3   31
63    3   --   --    3   --   --    3    7   --    3
67   --   --    3   --   --    3   23   13    3   --
69    3   13   --    3    7   --    3   --   11    3
71   --    3   --    7    3   --   11    3   13   --
73   --   --    3   --   11    3   --   --    3    7
77    7    3   --   13    3   --   --    3   --   --
79   --   --    3   --   --    3    7   19    3   11
81    3   --   --    3   13    7    3   11   --    3
83   --    3   --   --    3   11   --    3   --   --
87    3   11    7    3   --   --    3   --   --    3
89   --    3   17   --    3   19   13    3    7   23
91    7   --    3   17   --    3   --    7    3   --
93    3   --   --    3   17   --    3   13   19    3
97   --   --    3   --    7    3   17   --    3   --
99    3   --   13    3   --   --    3   17   29    3

例如,该表显示,在标题为9的列和标题为23的行中,923的最小素数是13,997是小于1000的最大素数。要计算一个数的因子,请在表中找到它的最小素因子,用除法计算剩余的余因子,然后重复计算,直到余因子为素。

在建立表格时,最小素因子是通过筛选计算的,而不是通过试验划分。设置与Eratosthenes筛相同,只是使用整数而不是布尔值,并且筛中的每个项都初始化为1。然后是每个连续的最小素数已过筛选,但未进行更改真的,在已更改为(忽略其他值)。与普通筛号相同的优化-仅奇数,从平方开始,并在以下情况下停止2大于n个-在此处申请。

您的任务是编写一个筛选最小素因子的函数,并使用该函数编写一个程序来构建上述因子表。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2