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

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.0.6-cp313-cp313-macosx_14_0_arm64.whl (117.4 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.0.6-cp312-cp312-win_amd64.whl (153.1 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.0.6-cp312-cp312-manylinux_2_39_x86_64.whl (142.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.0.6-cp310-cp310-manylinux_2_35_x86_64.whl (145.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.0.6-cp38-cp38-manylinux_2_31_x86_64.whl (138.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.0.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.0.6.tar.gz
Algorithm Hash digest
SHA256 5fec5c7e4f2c1ebb66b51538abbbec35bca1043347a8fcb08038b78d0207dfe5
MD5 1060545d9c5a4ff73d3bd08638ca6cd3
BLAKE2b-256 1aff234046569018fe03616c0860f40d8c02e15566b13d1da42f58ab12ed2093

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 87e2500fbbcd6abf12eb1d06cd195ce800994f0ffc75eaac40a9157a4ccd12c3
MD5 ab30f5c72b601d56ca2a324d106c120f
BLAKE2b-256 45265cbdd4d1c7485ec43ad4052c4de04b5d67fa8f5e98e2559e09977898e461

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5c66774f3dd5c569d97c489dd186186a42698315bca28deaf657c9694da56d93
MD5 16112473976267e94812e671e16a198a
BLAKE2b-256 001495074ac194d1f571e4b5548b0709f8fa1736d81d8ab69f94061535b10a7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c17869f3de9ff897cbd657bc5a0f083f4740a465e849316e03f58c50214ffd7c
MD5 aa6a0d9e259313ea9e46bf745b7be117
BLAKE2b-256 dd32dd46b43baf3b7a70fc529f03d35950ef41d9f8de6a5bb3a5434d96804be0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ab7368a2d0a08496461f0daf296e457b5b28f738709b45b1b4faba807dc84d32
MD5 321e8c7e209da4201413de99fa86bc16
BLAKE2b-256 4f5b6412c4c23315db0913a5b33214a806a5f40c07bd91136fd1b7d134897351

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 02a29d11c67a390dd8b2b0e2386deda06fd5a021900d4f5559277e2128e14aad
MD5 e69567cdf056e6f5ae052c4dab0460dc
BLAKE2b-256 03a283ec18a796f6bcbd31291f47f90b49c6bf8e19ad5d5d6e0e4d80d16bae9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 1a41d851b37f0e77ddb8329c7194978f3ad7116e5a7ac62aacc16cdf2d71b251
MD5 5b2c7c982c980fa069e8489c31413c49
BLAKE2b-256 9dee27b6956008f33392c9020b2fd2ba9bb7b1aafbd33d74aa643cb68742bb74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.6-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 e139a4ecc8e72fba3a36194df53bac651b81ff520e2add7ab7a76436b6f9ae68
MD5 e4ccb0f88d14a4d29a57d062a889c367
BLAKE2b-256 d9f88465cffbf5f77b067825db2669c78f19c2ff6839c1d2ea23ad74eed97e92

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