【问题标题】:Function to find the least prime factor寻找最小质因数的函数
【发布时间】:2018-03-31 17:31:11
【问题描述】:

PARI/GP 是否具有查找t_INT 的最小素因数或以其他方式执行整数的部分因式分解的功能?

例如,如果我有号码:

a=261432792226751124747858820445742044652814631500046047326053169701039080900441047539208779404889565067

factor(a) 需要很长时间,因为a 包含两个巨大的素因数。但是,很容易发现17a 的除数。

当然,在这种情况下,我可以只使用forprime(p=2,,a % p == 0 && return(p)) 或类似的试用部门来查找因素。但是,如果最小的因子有 20 个小数位,那将是不切实际的,在这种情况下,我可能想使用 factor 的复杂方法。

所以如果我可以打电话给factor 并带有某种标志说我会对任何部分因式分解感到满意,或者说我只关心最小的非平凡除数等,那将是理想的。

【问题讨论】:

  • 您是否考虑过Lenstra elliptic-curve factorization 的变体(专门用于获取小因子)?一旦发现任何因素,您就可以对其进行修改以破坏。
  • @JosephWood PARI 的 factorfactorint 函数已经使用椭圆曲线方法作为其方法之一。我知道我可以编写自己的椭圆曲线实现,但我问的是 PARI/GP 中是否有内置的东西。
  • PARI 库具有可能有用的函数Z_factor_until。但是证明你已经找到了最小的质因数通常并不容易,选择一个选项:只适用于特殊数字,有些只是“高概率”而不是确定性;运行时间长;仅适用于小数字。
  • 另外,对于大于 40 位的数字,您最好使用yafu

标签: factorization pari pari-gp


【解决方案1】:

我的问题的一个非常简单的部分答案是factor 有一个可选参数lim,所以你可以说:

factor(a, 10^5)

例如,只有10^5以下的因子才会出现在结果中(大于10^5的辅因子可以是合数!)。

factorint 的可选参数完全不同,是一个按位的“标志”,它不允许指定限制。这可能是让我感到困惑的地方。举个例子:

factorint(a, 1+8)

选择标志1(“避免MPQS”)和8(“不要运行最终ECM”)。

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多