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

Uploaded CPython 3.13macOS 15.0+ ARM64

FindAFactor-5.1.3-cp313-cp313-macosx_14_0_arm64.whl (117.7 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

FindAFactor-5.1.3-cp313-cp313-macosx_13_0_x86_64.whl (132.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

FindAFactor-5.1.3-cp312-cp312-win_amd64.whl (152.8 kB view details)

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.1.3-cp312-cp312-manylinux_2_39_x86_64.whl (142.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.1.3-cp310-cp310-manylinux_2_35_x86_64.whl (145.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.1.3-cp38-cp38-manylinux_2_31_x86_64.whl (139.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.1.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.1.3.tar.gz
Algorithm Hash digest
SHA256 2c7d7eb6f977994cb6e218cffccc21ed618b5f02061592bd11da90721c0ed464
MD5 8052076cc7bc9aec6dc7718a02754d17
BLAKE2b-256 7d773264b2624ddd0bf97687f81c5e495ba8c7c1513ece8c9b8996aab34e3522

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 69e4ab0758cf8b92cdab819c88e7bbde01fa5ca4825bed5368fbc00f49d3ab49
MD5 8137cd62f1adf11e1a732d7d0c2b1807
BLAKE2b-256 23ceaed1350178b097e5df8816c8d8aabcc60f893d3d910ce23f4725a129427d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 822e79afc1d7d9608b8e175a0d7a3b24a11764b91e25106992c8a0c67a96d932
MD5 eb99f9b0998a1f6423b75ff31e3cca0b
BLAKE2b-256 41256c31746b243d04423069d76c63c6778dec5509bb223a8bd150558e96643e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 02c9c20d6d3e4d66fbb42f45353e3e526c94271e70806e6d4761d2e0411f6ea7
MD5 d5ed518bf126b5fe15dcb1e92fd9e6ae
BLAKE2b-256 9efb6128b643bc579e4c06c41b22bdd5732fd8f9c8e047b99fb2e7acad3853ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 243acb192f2edd818b66d1eeee78d14f72a4094b6e108318e02ca06cea574ac1
MD5 c20e39543ffffeeaa8cf00cea87b2204
BLAKE2b-256 eb466aaebf9ae9787e255cc3a9502679263639c783c66fb57754f79f93342b61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 33e3dbb6bc71f64abe0ba07e07b79e4383d3dae3573e85edc3fdc5ac17692333
MD5 f44824d4db61fac961a7144009df5253
BLAKE2b-256 0765a2102aea2b13f2df2dbcab2c8dc390ad5f0703894edf401549bf39bb7455

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 7edd7a07cfea71b119ec4b79a84c6a754e7b5ef670eb7fd32d6842f315fec99e
MD5 e850a91b7dc02c77f459cd11f3617bb2
BLAKE2b-256 fe0a5213877171350866a2999cbe4007647af3f6e97d3b1bd99191bf3bc1d4a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.3-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9900f6fb2f09cd44395bb969ae29149ab3abfe978c59603dfa212162d6d5d8b0
MD5 ffa1671116b212588966aa33ef808344
BLAKE2b-256 fc646bd720fb30127f24e9e95503d3d436dcebffdb0f30d8467eec5dc8b5a70e

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