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.2): This controls the number of rows sieved for Gaussian elimination before terminating the sieve and is calibrated such that it linearly multiplies 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 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.0.3.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.0.3-cp313-cp313-macosx_15_0_arm64.whl (113.2 kB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.0.3-cp313-cp313-macosx_14_0_arm64.whl (112.2 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.0.3-cp313-cp313-macosx_13_0_x86_64.whl (126.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.0.3-cp312-cp312-win_amd64.whl (148.6 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.0.3-cp312-cp312-manylinux_2_39_x86_64.whl (137.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.0.3-cp310-cp310-manylinux_2_35_x86_64.whl (145.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.0.3-cp38-cp38-manylinux_2_31_x86_64.whl (137.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.0.3.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.0.3.tar.gz
Algorithm Hash digest
SHA256 5596cb76562ef216643a9b8e60cec9b4502efdb2d85bd4b606876d4a3e5ad4e3
MD5 4d3b2f4f15576554bc149dc4d15c93cf
BLAKE2b-256 b74d0d94a1ad076943b3d318deaf69b9e5d4d4feb9f7d657ec0c694cc7f688e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 b9b295e26f95a5a330f96e2c04eb67a0ebf187d772cca8a4fc923247f57a91c1
MD5 cea68a51477315fea8fd44f1718363d4
BLAKE2b-256 8178c44c330e2d1c19397fa7e831b076ce59ebe315e41ee04dce37521720296a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7056b4d207135698c93d798da0b86541c98581c0b4a8e8d98b55116fb177e360
MD5 a9b77245d4755d4746497a196bde6af3
BLAKE2b-256 e2995db84a555b29757bf5228bc8af00b8bcc46eea41390d963c4c2c6db73877

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 773b1268e6170238bd25247c35a8744ba57d5a74b16a363d44884924a96cabdd
MD5 aed9c743c72b02e4f7629b144f9feba1
BLAKE2b-256 ef645ae3a304d2d0a6ee3b922e88edea94ab389457e77a3ea860bdfb00debe35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3fdd1260cf2c5b9a9570b61ed2cd50393c17e3a9ce40bf71bfadecd28600e174
MD5 eff74e37c4420b06f4cb1685c27b218a
BLAKE2b-256 f56393f83392ddbe7747043d80463d13a3efdd3698a346d9d37676989e4567fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 2c8666fd1657ff8a5bf4b61ea8b59fef41ee2066ee38cebe0ee6383f0fbe6bbc
MD5 d4ad946b276fc08430ad72f6dbd00a19
BLAKE2b-256 6c8b0a02dc8cde5d8593cf0eaba1799f3e741ce43adb0a9aada53c902b10568c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 96d3f8ac937ebaee7743e7f14ca550f54ff8012ba233c9ea93fbe0ca8b2641ea
MD5 5717cf48d8889aebf26db9678b41745f
BLAKE2b-256 01e0ef2ab69a04cf9e265bab5805c8558549aaef8074a478a89d0f5ef67ae8b4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.3-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9e50f459f697243e754e3ceed945f5d7f2f69e4e583845177e980958dc97df70
MD5 bd123f34ebb45a05ec230951321c48ab
BLAKE2b-256 e12f364b18a1ebf3d6888f09694c78a3313e063e09e096589dd73d8dbd0cae46

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