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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.2.4-cp312-cp312-manylinux_2_39_x86_64.whl (143.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.2.4-cp310-cp310-manylinux_2_35_x86_64.whl (146.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

FindAFactor-5.2.4-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.4.tar.gz.

File metadata

  • Download URL: findafactor-5.2.4.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.4.tar.gz
Algorithm Hash digest
SHA256 f11e1d3441da054b009e186677885e6755fe332b0d8ff26fbded41a4069327f2
MD5 d2ad9d60c7cdbe1497d69706019377af
BLAKE2b-256 0112b540a0cc56a5fbd5594c29a9c487a54d015168084bdcade6144aa99d0861

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 bb9b49e9e555f799b5ed3804f7339ee4ef978e1fbb4ec6739224a6e9ff1f49ca
MD5 75a9192ca1d79044571b89072559cd73
BLAKE2b-256 49004586429f9931cc8cc315bae15b16d39e4eb7017c5a8044c055534e64c817

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 0f2f264b4f8aeb415fedbfbd8411776e0c778c8af4067498aee48cf8b6d52910
MD5 796a7c971f59a677c80cee2669556cee
BLAKE2b-256 390053f441a6d9b1173b1d6659c71b9f4ec4edcc97a678c58833a0db5aa78a30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 43284a4999676f4d78084134d2a0415f527063879eff526056a343bc3cf8e602
MD5 34e8b6da11ef1c7c31193887d8cfbba6
BLAKE2b-256 419fcf5f1d00bdc05800ef189c2496d33935dc280c8398155ad5ad6aea9597f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3c25237f2d16e0eede9cef8552736324a820381905a57ab1df18df2e1d661a8b
MD5 44df62ca5a720378ee428e33d49a8472
BLAKE2b-256 ed65a156adde36008299a96a1b1d5d93fe7d86e093fbac8d4f09112e01f6a428

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 2d18cb65d56dc622542c60d0c5e69e3937385c204707c79940102053436fa84a
MD5 07b653f0684cc31a7bd216ce3d7113a4
BLAKE2b-256 1899ffc60a5bd77d6e961718526f80a9f700e7eaf8fca0c5bb556c41c221ae16

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 00015de04ed338e0316bd4b22c1618d8bd0fa37650a011443ccae671537a0bc7
MD5 593948bdc7eb16653163d9e22fc8a611
BLAKE2b-256 11dac92dc36d5d656fecb7963488ab8f6192d49ba24036e1f568d2f11512d3ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.2.4-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 69fcd50f8574010a9a8cd6a01d5da50bc280ef18d614fe0a9961855aacb67dc5
MD5 d42a4a46fadad36faed503f8eb385274
BLAKE2b-256 eb0a77009b216e4089f0f166613ec485bf2f05661b512a13691f2ca5a23206b6

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