Skip to main content

Find any nontrivial factor of a number

Project description

FindAFactor

Find any nontrivial factor of a number

PyPI Downloads

Copyright and license

(c) Daniel Strano and the Qrack contributors 2017-2025. All rights reserved.

Installation

From PyPi:

pip3 install FindAFactor

From Source: install pybind11, then

pip3 install .

in the root source directory (with setup.py).

Windows users might find Windows Subsystem Linux (WSL) to be the easier and preferred choice for installation.

Usage

from FindAFactor import find_a_factor, FactoringMethod

to_factor = 1000

factor = find_a_factor(
    to_factor,
    method=FactoringMethod.PRIME_SOLVER,
    node_count=1, node_id=0,
    gear_factorization_level=11,
    wheel_factorization_level=11,
    sieving_bound_multiplier=1.0,
    smoothness_bound_multiplier=1.0,
    gaussian_elimination_row_multiplier=1.2,
    check_small_factors=False
)

The find_a_factor() function should return any nontrivial factor of to_factor (that is, any factor besides 1 or to_factor) if it exists. If a nontrivial factor does not exist (i.e., the number to factor is prime), the function will return 1 or the original to_factor.

  • method (default value: PRIME_SOLVER/0): PRIME_SOLVER/0 will prove that a number is prime (by failing to find any factors with wheel and gear factorization). FACTOR_FINDER/1 is optimized for the assumption that the number has at least two nontrivial factors.
  • node_count (default value: 1): FindAFactor can perform factorization in a distributed manner, across nodes, without network communication! When node_count is set higher than 1, the search space for factors is segmented equally per node. If the number to factor is semiprime, and brute-force search is used instead of congruence of squares, for example, all nodes except the one that happens to contain the (unknown) prime factor less than the square root of to_factor will ultimately return 1, while one node will find and return this factor. For best performance, every node involved in factorization should have roughly the same CPU throughput capacity. For FACTOR_FINDER mode, this splits the sieving range between nodes, but it does not actually coordinate Gaussian elimination rows between nodes.
  • node_id (default value: 0): This is the identifier of this node, when performing distributed factorization with node_count higher than 1. node_id values start at 0 and go as high as (node_count - 1).
  • gear_factorization_level (default value: 1): This is the value up to which "wheel (and gear) factorization" are applied to "brute force." A value of 11 includes all prime factors of 11 and below and works well for PRIME_PROVER, though significantly higher might be preferred in certain cases.
  • wheel_factorization_level (default value: 1): "Wheel" vs. "gear" factorization balances two types of factorization wheel ("wheel" vs. "gear" design) that often work best when the "wheel" is only a few prime number levels lower than gear factorization. Optimized implementation for wheels is only available up to 13. The primes above "wheel" level, up to "gear" level, are the primes used specifically for "gear" factorization. Wheel factorization is also applied to "peturb" FACTOR_FINDER mode into non-multiples on the wheel, if the level is set above 1 (which might not actually work, but we leave it for your experimentation).
  • sieving_bound_multiplier (default value: 1.0): This controls the sieving bound and is calibrated such that it linearly multiplies the square root of the number to factor (for each 1.0 increment). While this might be a huge bound, remember that sieving termination is primarily controlled by when gaussian_elimination_row_multiplier is exactly satisfied.
  • smoothness_bound_multiplier (default value: 1.0): This controls smoothness bound and is calibrated such that it linearliy multiplies exp(0.5 * std::sqrt(log(N) * log(log(N)))) for N being the number to factor (for each 1.0 increment). This was a heuristic suggested by Elara (an OpenAI custom GPT).
  • gaussian_elimination_row_multiplier (default value: 1.0): This controls the number of rows sieved for Gaussian elimination before terminating the sieve and is calibrated such that it linearly multiplies one plus the number of smooth prime columns in the Gaussian elimination matrix (for each 1.0 increment). So long as this setting is appropriately low enough, sieving_bound_multiplier can be set basically arbitrarily high.
  • check_small_factors (default value: False): True performs initial-phase trial division up to the smoothness bound, and False skips it.

All variables defaults can also be controlled by environment variables:

  • FINDAFACTOR_METHOD (integer value)
  • FINDAFACTOR_NODE_COUNT
  • FINDAFACTOR_NODE_ID
  • FINDAFACTOR_GEAR_FACTORIZATION_LEVEL
  • FINDAFACTOR_WHEEL_FACTORIZATION_LEVEL
  • FINDAFACTOR_SIEVING_BOUND_MULTIPLIER
  • FINDAFACTOR_SMOOTHNESS_BOUND_MULTIPLIER
  • FINDAFACTOR_GAUSSIAN_ELIMINATION_ROW_MULTIPLIER
  • FINDAFACTOR_CHECK_SMALL_FACTORS (True if set at all, otherwise False)

About

This library was originally called "Qimcifa" and demonstrated a (Shor's-like) "quantum-inspired" algorithm for integer factoring. It has since been developed into a general factoring algorithm and tool.

Special thanks to OpenAI GPT "Elara," for help with indicated region of contributed code!

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

findafactor-5.1.6.tar.gz (5.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

FindAFactor-5.1.6-cp313-cp313-macosx_15_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.1.6-cp313-cp313-macosx_14_0_arm64.whl (117.9 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.1.6-cp313-cp313-macosx_13_0_x86_64.whl (132.7 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.1.6-cp312-cp312-win_amd64.whl (152.9 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.1.6-cp312-cp312-manylinux_2_39_x86_64.whl (142.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.1.6-cp310-cp310-manylinux_2_35_x86_64.whl (146.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.1.6-cp38-cp38-manylinux_2_31_x86_64.whl (139.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

Details for the file findafactor-5.1.6.tar.gz.

File metadata

  • Download URL: findafactor-5.1.6.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.3

File hashes

Hashes for findafactor-5.1.6.tar.gz
Algorithm Hash digest
SHA256 a3a61fbce6085eef0ae636e7123c9818c28c2088e2ab0b8a10c95e382a65d941
MD5 b8df8340c601721680efa97f7fe4f369
BLAKE2b-256 79161d33a6c19a85cdc250ef5ca4b86b94b08c969300068e8b407b21ba1325a7

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 f23a3ea24b8e559ab17e14a227b45d6d1c24aa4f3ee5e9784217e7cfb208cfe7
MD5 98261c2db1b0cfb8a808dca22205f0ae
BLAKE2b-256 45058b8149df85f777842f1e17d215a9ca7db2294d0eaf2d533bfee252643145

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4d082c0d3298005f1ca743c63f97c58837633496c9031285928345a7f67ded80
MD5 80c30b766bd18f87928bc9c4c1c7618f
BLAKE2b-256 f67bde55dd5a2ea42c4ab23d29eebfd31a41fcc4df240f43a2253945790829ad

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 77bc8a24b9363db4a759c4002bc36f3c18e1c66ebeeee110af77fc93282d2626
MD5 cd6bd623cf21dacdd806e8ef3bad1d14
BLAKE2b-256 ee914d6cb516cb709a8872a9e86cb09a31524887671c3705ff3bb09fcad8784d

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1ee324229336344a34f77816a2e80116a41dbeaabe206ab01b1067c4f2ab8eb9
MD5 fd2c6009692c8111ab05566a6d21fdd0
BLAKE2b-256 93b701b93933b1a388a1b339886f79a5e73bbe80018a7c80bbc57d7b36882eee

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 6b870b6f0c044359b430871634111bd23fca8eb55de6f7f3acc1c6ff959b9e5c
MD5 98ecdd19fa77285ca447d1aa896f1687
BLAKE2b-256 b938552fc0037a86bb6060cee949daa1944a45e5d94ff4ceda57bc4a978110b6

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp310-cp310-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 59d1736ea93ce795cf44892576417aa1dfa3044a5269286edfde8dfdfeb6ad23
MD5 175035f8bef568c3421988055a382c76
BLAKE2b-256 1e4cc317f136be13b525055989e4d046ade3a9a0a670f7ec550e842d9e258984

See more details on using hashes here.

File details

Details for the file FindAFactor-5.1.6-cp38-cp38-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for FindAFactor-5.1.6-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 a401ae10e4cb10dc30753d5768864ffad455d8360cd14b54d428e7362a6394e0
MD5 a9a6375ef6b370a9f9ff26f84d8a5534
BLAKE2b-256 27e4dd8022e547590ee16d71321315d055a17c97e53fbeea10b442e34f2d7d1b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page