【发布时间】:2018-03-31 17:31:11
【问题描述】:
PARI/GP 是否具有查找t_INT 的最小素因数或以其他方式执行整数的部分因式分解的功能?
例如,如果我有号码:
a=261432792226751124747858820445742044652814631500046047326053169701039080900441047539208779404889565067
factor(a) 需要很长时间,因为a 包含两个巨大的素因数。但是,很容易发现17 是a 的除数。
当然,在这种情况下,我可以只使用forprime(p=2,,a % p == 0 && return(p)) 或类似的试用部门来查找因素。但是,如果最小的因子有 20 个小数位,那将是不切实际的,在这种情况下,我可能想使用 factor 的复杂方法。
所以如果我可以打电话给factor 并带有某种标志说我会对任何部分因式分解感到满意,或者说我只关心最小的非平凡除数等,那将是理想的。
【问题讨论】:
-
您是否考虑过Lenstra elliptic-curve factorization 的变体(专门用于获取小因子)?一旦发现任何因素,您就可以对其进行修改以破坏。
-
@JosephWood PARI 的
factor或factorint函数已经使用椭圆曲线方法作为其方法之一。我知道我可以编写自己的椭圆曲线实现,但我问的是 PARI/GP 中是否有内置的东西。 -
PARI 库具有可能有用的函数
Z_factor_until。但是证明你已经找到了最小的质因数通常并不容易,选择一个选项:只适用于特殊数字,有些只是“高概率”而不是确定性;运行时间长;仅适用于小数字。 -
另外,对于大于 40 位的数字,您最好使用yafu。
标签: factorization pari pari-gp