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.4.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.4-cp313-cp313-macosx_15_0_arm64.whl (118.2 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.1.4-cp313-cp313-macosx_13_0_x86_64.whl (132.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.1.4-cp312-cp312-win_amd64.whl (152.8 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.1.4-cp312-cp312-manylinux_2_39_x86_64.whl (142.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.1.4-cp310-cp310-manylinux_2_35_x86_64.whl (145.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.1.4-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.4.tar.gz.

File metadata

  • Download URL: findafactor-5.1.4.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.4.tar.gz
Algorithm Hash digest
SHA256 83220cd2d4e03fcccde14e0f2aedef84301eb36f1495329eb8e90ca75bbe7216
MD5 97e33de2e4a7ec49b00c235fbd15ae9d
BLAKE2b-256 6296b2388c851921c7722716306342e5b6a120c633992577aa890618aed0fced

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 4b798d0e55541f11f8c78adb1f8b6b56e6e1a48f38af085b2d1fea90c11d993b
MD5 9823990311e4abf7f2eb658b54499955
BLAKE2b-256 6250f122da8fbfcb4103d75f36a3b67c40b787394f1c632cd71334069dc264e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 2d4cd881347e81f1e926fbc1e7f8679eff9a03cbb825fa16dc4f0d416af6f73f
MD5 769c640ab75452cd0b520a9e1ceb4d1f
BLAKE2b-256 c331381e707d288cef80fd5f86d8769ea5ef4b9999e3b6b8932fbb34805ea643

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9503bf6435ceead1b64506ab8399ec5fd200bf2e9f603b2eba8c64f9e12cc464
MD5 87e3f169f17c531102700299c1546c97
BLAKE2b-256 84708f6c7c3ec986ef792e1fccdd12132bf3fa9694c3eb50570c82943d552221

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6ed9e453297e1b19d7015db5bf96645ebee85e02e8665ef213fe0f315664f131
MD5 b4b2ae90603f4553ce0ae3e7c1fb6c24
BLAKE2b-256 b234e46cf90dc3302b93d412f1fabbaa359d8b3a138d031a06f110dbf034527e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 376aaabc9d22c7704304b7dfb301461fcc501fbca19986de4b29323641cdec65
MD5 db61af3d20c3bacb71d100bc9b47a5b1
BLAKE2b-256 b3dbb31d0b22e2d36f628578f41c03bab81ddad48f784afd05ff261a41112010

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 4510272ed3efd90971a88d06cb065a44b285fa8b4e37e4f462fb38a7b0d97f94
MD5 6a11b1cb022169eee52956a825064c31
BLAKE2b-256 00b80d0a906e8028e4a2d4fd8e5c6e377ed9dc57e979534f12d8c2943eb55326

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.4-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 598c72afff3012b996e90e05b4229b4d41b22f2ab1ef5cf24f7bc16bb5ee3c2d
MD5 7d789f42e073beb98aba0eb4459c8d92
BLAKE2b-256 18b75545c060fa39c46cc024549f55361ccdc88ccf5afab08cffd2f3e424be49

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