轮式因子分解法详解
核心目标:通过预处理加速试除法(Trial Division),跳过明显非因数的数字,减少测试次数。
一、核心思想
当用试除法分解数 $N$ 时:
- 朴素方法需测试 $2,3,4,5,\dots$ 直到 $\sqrt{N}$
- 关键观察:
- 除 $2$ 和 $3$ 外,所有质数均为 $6k \pm 1$ 形式(如 $5,7,11,13,\dots$)
- 许多合数(如 $4,6,8,9,10,\dots$) 已被 $2$ 或 $3$ 覆盖
- 轮式思想:
构建「轮子」跳过冗余合数,仅生成可能为质数的候选除数(如 $5,7,11,13,\dots$)
二、算法原理
1. 选择轮子基础
- 常用基础:
- 模 $6$ 轮(基于 $2,3$)
- 模 $30$ 轮(基于 $2,3,5$)
- 轮子越大,跳过越多,初始化越复杂
2. 构建模 $6$ 轮
- 轮周长:$2 \times 3 = 6$(模式每 $6$ 个数重复)
- 生成步长:
列出与 $6$ 互质且 $<6$ 的数:$1,5$ → 步长序列 $[1,5]$
3. 算法步骤
- 处理小质数:测试 $N$ 能否被 $2,3$ 整除
- 初始化:
- 起始候选数 $f = 5$
- 实际步长 $[2,4]$(对应 $5→7→11$)
- 索引 $i=0$
- 轮询循环:
while f² ≤ N: 测试 N % f == 0? f = f + increments[i] i = (i+1) % len(increments)
三、实例演示($N=1541$)
-
预处理:
- $1541$ 不被 $2$ 整除(奇数)
- $1+5+4+1=11$ 不被 $3$ 整除
-
轮询过程(步长 $[2,4]$):
迭代 候选数 $f$ $1541 \mod f$

最低0.47元/天 解锁文章
674

被折叠的 条评论
为什么被折叠?



