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

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.2.5-cp313-cp313-macosx_14_0_arm64.whl (117.6 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.2.5-cp313-cp313-macosx_13_0_x86_64.whl (132.3 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.2.5-cp312-cp312-win_amd64.whl (152.3 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.2.5-cp312-cp312-manylinux_2_39_x86_64.whl (143.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.2.5-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.5-cp38-cp38-manylinux_2_31_x86_64.whl (139.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.2.5.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.5.tar.gz
Algorithm Hash digest
SHA256 a478f624944642f644df29c285b2f5dcf06f314cb1cf4d13292621a4a9f7e74a
MD5 2f3b7551f46279d2c6b86c619617f5c4
BLAKE2b-256 4755ded67601d84c23656d63dfa767a9a4c5413ed67e738e3ad1069e97b3f243

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6ef34b861f865d83aa3eb1bb1eed5342d3513337b7e7688a11d2fb04345b8b95
MD5 b79258140d730d07e19fc8907e151781
BLAKE2b-256 d88f596cdc9f1db8e8051136988ccdcc34507a2b2e11d3d52f55560d840e3669

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 70e7319382edef6fbf4dd230d12b014a85b0ffd984888afc35b07e0f8e3a9bfa
MD5 d4f2778100baf5cf5f2dd9ca636c2959
BLAKE2b-256 f37ee90667f8849611c63161a27e924fa9af41d2adbe83e1a65efdae37b21dca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 62a1bb7171bd52b2fc5c0ef1bb603bf23ddbfacd9fcbc2a359719694873143be
MD5 95f8b4247b189510d57fbff543ec220b
BLAKE2b-256 ae1fcd8983061310f2e2d5e3a8577d2e8272cc3e4ea1d3f4f8be71a97bc5e219

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4020c135fd296fcc7836d440e3b8c5d7fb9f7829764396348c1d5ca5e2bd4712
MD5 bfa80a6dabbff7e4994e6d21091d8d43
BLAKE2b-256 b03960a0c90a48938804273d9f8aafcd5055e1b796de18de05fa53f0271a7701

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 044d77bbba1f3d08942c5d90f7b98be629cec95d74c407c96187db945f54e848
MD5 82bbd0c24488f1ca66b2fa32524db069
BLAKE2b-256 eb7e82e583a6c7d1bb0b6adb4a135acd60fe1b2c0947a588b427ba426713e6ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 128c9082a0d59ba7bbeed549b40c7663cc3f10915b45ac0b734ae3f83495169a
MD5 e8858cc670f4a796a6cebb2ee7b5cce8
BLAKE2b-256 74cfc76202e54fbd0d93d7cd3ea81d9db0b509dd2c4ae6a4e7bbac86da19305f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.5-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 3d4e454ba618f10885e7701e7c7605160720d7d5299a9eb06c795560a87e6ed3
MD5 e7ccaef8fc64a0d10c4dac221e7474c5
BLAKE2b-256 39d98a67927e55bd1b56d88be96a30811950db086a3b3b25be172e29a6b2b0cf

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