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

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.0.0-cp313-cp313-macosx_14_0_arm64.whl (113.0 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.0.0-cp313-cp313-macosx_13_0_x86_64.whl (127.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.0.0-cp312-cp312-win_amd64.whl (149.8 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.0.0-cp312-cp312-manylinux_2_39_x86_64.whl (138.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.0.0-cp310-cp310-manylinux_2_35_x86_64.whl (146.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.0.0-cp38-cp38-manylinux_2_31_x86_64.whl (138.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.0.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c309bd6549581b55f2253a1836986064c506f3cf32331a09da97c7882494ef32
MD5 1d7ffdf97c1f556321590795cbaa8bc5
BLAKE2b-256 bcc3fbc06c3694f5f75597dcf410638e1d1cc5ae2b4995654636a487064f5410

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8aa86cbd053bf1af9d309ead2707631db83a6c867c3323ea55f5ed9be64b8ab8
MD5 351a8f04b551a9bfaf1a070027133ce4
BLAKE2b-256 0ca66a18047a9d2a032dc32a7571edcea9e2783d5399c881d7d8be7ac5756862

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a099649283af52ff0bd0ddaaf6be6c35d6c8839a79b593b997ccc06ebe5b3451
MD5 3ac28b6eb74b6f5f05f9193c35c41d47
BLAKE2b-256 ee07798176f2abcb80daa6acd97a106c13a78832bc1c3c6b5d6757de7bf18bc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7e4b3fdb557d955761e8893f7db05fa3ecef38700c6c0eabd159a7dcf61236b5
MD5 9253e56d16fdb8b3f73b2d079456f842
BLAKE2b-256 83551a5e56e8adb92dfec33b3735aebac78e4d1afc183ae9900c515d6b63f510

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e1b4001542180510c31846d8244ecc461b9c8594bd41c740a67da7b6057d31e5
MD5 6949959a7d6e64b5b0844c70cf649563
BLAKE2b-256 4fc08396c1da48b4daffb76087090d9e8f38d12aa4b01e08faa77ef77fa88797

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 a14dace71e9e1103fbc597547fef297a54cd00bc2f58b1ce4fb29b5967cb9228
MD5 fdab7962a9fd33ebd667ccf559bbd844
BLAKE2b-256 bf9d1acf3f9d6fb14cf24bf05369e0e778942c036f74250ce35d993980126587

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 76fdf61d0e1767ab640fd9bb1a4aa9468230d408d7fea69220ca48a4025f7bdb
MD5 8524dba8dae0f07a30b4e80b9c6942ae
BLAKE2b-256 1a78a8fa1b45e2dd99385746c5eeabcd965d58265ae55382dcc9e7c47ef6abdd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.0.0-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 5504ee08b802eb60c144f8513b38a644294ac870617854166f4a29ec999685e5
MD5 b77fbb97c9af61b85d6782c5ad2800e8
BLAKE2b-256 c26742a4b411b6537504bbf5e00961cdbbcf262a81903c40b35bbb1ede4b2fc7

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