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

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.2.3-cp313-cp313-macosx_14_0_arm64.whl (117.5 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.2.3-cp313-cp313-macosx_13_0_x86_64.whl (132.2 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.2.3-cp312-cp312-win_amd64.whl (152.2 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.2.3-cp312-cp312-manylinux_2_39_x86_64.whl (142.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.2.3-cp310-cp310-manylinux_2_35_x86_64.whl (146.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.2.3-cp38-cp38-manylinux_2_31_x86_64.whl (138.9 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.2.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.2.3.tar.gz
Algorithm Hash digest
SHA256 fb087e4a9c7ab51b0ad621b72320f40a83eea5ab126ad5da0b84e23a454b2c39
MD5 7dc5b2be6be4d37b99c91ef9919323f3
BLAKE2b-256 c5b46babf2cf8f340609a282fddcaefc6335fc3050ce38fec14b7612cb41ab1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 3ad9b023c840ecbe3f4ac6860168823fa5987f5b6c408fefe394728df6ee85bb
MD5 f2555e43d246d396d20fd5db14f86ca0
BLAKE2b-256 f3b20b8f8d1a5581dcd08d60b2df38e58d1337bc130ee5e6b4a68bf600b2e25a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e75221f3b45b785a10d78e954e1ad6dfcc4ba6fce3ba7752ae649afe075199a6
MD5 4a7f7eaf1184ecb4504c8e5f05ccf340
BLAKE2b-256 7b3076f0d8ab91443f1538a00037daaadcbc7b6a86833e0198a9b26b1216dcb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 20494806af4400ad7b5f93b7393e2f838a75ff332b45b265da4139e4090fd8f2
MD5 d51d3d69bd46554a4a9ddd00cd97435a
BLAKE2b-256 1d8b775cb546019b601eb23615f3db13cc07add94ae1841ba4ffb6347c12e2ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab26d07efbbcc8145c061a2e37e64faf77e17c897805e793234e0c4a1bc03668
MD5 be0c4167cc3ea44632b141da4bd5d64f
BLAKE2b-256 f75ec9c8dbc9e4c50a328b60245cc20131d51ed71706529dc28a032173ae3a47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0d95b62ba86624cfb28716cf303b84aee34b8c444930849376887239c96106f2
MD5 a16f72ac730ff1230e13898adbb26767
BLAKE2b-256 25ab3259b4df452721112ea33b697d4471d2d02c68e4f4e5fd8ecb26cec58a71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 6c5551d885187078c40c65db98b4056bc1a326e586e413f5955447b28a518c93
MD5 976753196741486e0269fb7001fce758
BLAKE2b-256 d85bb7f8b3696f07161fba799849ddf2097e17739d4303a814e40ee413aac958

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.3-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 b8c232bbd6ced92b57204d509f6d497d5416f317360dceec21756c6941c456f1
MD5 bb378131a1416c11758f2154e689123b
BLAKE2b-256 555874a03d827144002f5a906bf7df9dd79aa6cc04f5d57367ade4bef242351d

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