danog/primemodule

Prime模块能够非常快速地进行大数的素因子分解。

1.0.13 2023-05-27 14:41 UTC

README

Build Status

Prime模块能够非常快速地进行大数的素因子分解。

它可以快速分解大数(甚至大于 PHP_INT_MAX,得益于 Wolfram Alpha/Python 模块)。

安装

使用 composer 安装。

composer require danog/primemodule

安装 Python 以启用 Python 模块,并安装 PHP cURL 扩展以启用 Wolfram Alpha 模块。

使用方法

此库有 4 个素因子分解模块(按速度排序,大半素数通常是 20 位的半素数,由 telegram 生成,更多统计数据请查看 travis ci 测试)

  • native_cpp - 一个 native c++ 分解模块(它是最快的),使用 100 个大半素数测试的中位时间 0.03943687915802

  • python - 一个 quadratic sieve Python 模块(通常比 pollard brent 模块快,有时会卡住(然后在 10 秒后被 lib 杀死),使用 100 个大半素数计算的中位时间 0.35134809732437 秒,其中一些导致模块冻结并杀死。通常比 pollard brent 模块快 10 倍)

  • python_alt - 一个也用 Python 编写的 pollard brent 模块(使用 100 个大半素数计算的中位时间 0.1801231908798 秒)

  • wolfram - 一个 wolfram alpha 模块(使用 100 个大半素数计算的中位时间约为 2.1294961380959 秒)

  • native - 一个 native PHP lopatin 模块(使用 100 个大半素数计算的中位时间约为 2.5698633241653 秒,有时可能比 wolfram 模块快:例如,在 HHVM 上,native 分解通常需要 0.1 秒)

这些模块可以单独使用,只返回一个因子(对于半素数分解很有用),或者使用完整方法,返回包含所有因子的数组。

此模块是为了进行半素数分解而创建的,因此可能不适合复合数。

Python/Wolfram Alpha 模块接受大于 PHP_INT_MAX 的数值字符串,并且如果因子大于 PHP_INT_MAX,它们也将作为字符串返回。

还可以使用一个自动函数,它会自动按以下顺序选择模块:python_alt, python, native, wolfram。

require 'vendor/autoload.php';

// quadratic sieve factorization
$factor = \danog\PrimeModule::python_single(2768594593405030913); // returns 1455582581 or 1902052573
// pollard brent sieve factorization
$factor = \danog\PrimeModule::python_single_alt(2768594593405030913); // returns 1455582581 or 1902052573
// native PHP single factorization
$factor = \danog\PrimeModule::native_single(2768594593405030913); // returns 1455582581 or 1902052573
// wolfram factorization
$factor = \danog\PrimeModule::wolfram_single(2768594593405030913); // returns 1455582581 or 1902052573
// automatic factorization
$factor = \danog\PrimeModule::auto_single(2768594593405030913); // returns 1455582581 or 1902052573


// quadratic sieve factorization
$factor = \danog\PrimeModule::python(15); // returns an array with 3 and 5
// pollard brent sieve factorization
$factor = \danog\PrimeModule::python_alt(15); // returns an array with 3 and 5
// native PHP factorization
$factor = \danog\PrimeModule::native(15); // returns an array with 3 and 5
// wolfram factorization
$factor = \danog\PrimeModule::wolfram(15); // returns an array with 3 and 5
// automatic factorization
$factor = \danog\PrimeModule::auto(15); // returns an array with 3 and 5


有关更详细的示例,请参阅 tests/testing.php

由 Daniil Gentili 创建的库(https://daniil.it