在计算机出现之前,大多数计算都是借助于表格:对数表、正弦表等等。这些表格无处不在,不可或缺,而且错误百出。需要对数字进行因子分解的数字理论家使用了数字的最小素因子表。最古老的这样的表可以追溯到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