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

Uploaded CPython 3.13macOS 15.0+ ARM64

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

Uploaded CPython 3.13macOS 14.0+ ARM64

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

Uploaded CPython 3.13macOS 13.0+ x86-64

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

Uploaded CPython 3.12Windows x86-64

FindAFactor-5.1.2-cp312-cp312-manylinux_2_39_x86_64.whl (142.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

FindAFactor-5.1.2-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.2-cp38-cp38-manylinux_2_31_x86_64.whl (139.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

File details

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

File metadata

  • Download URL: findafactor-5.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 8070e23d14bf67d8e34b53b886b798a6f1fcb9e0ed8ef57f1cf40e20b6cf9d72
MD5 ff7d04bce856b52fd34620a2b217dee7
BLAKE2b-256 ed6b79b9950b58166e4e98dec0acccad4a8a2f6eabd8c03689d0865db1ddc523

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 cad0749bdf864660d2a7c0840da7b7c4c262f38194482dbad0a605705b0b4a63
MD5 00caf2bc04cd3ad0b7e98d93097f8e3b
BLAKE2b-256 9dcb318a5de01db5cd400dcf4462c3972bd7101dc653bf3c82c52721ebb41922

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 936bf0008d49f84dac8114f8d470876179f801125a44d3353f50eb60f93d17a2
MD5 c1552069d9992145b5b30d3c250694be
BLAKE2b-256 0d4c3b8ebea1758a6b51495ac3d09d03c11e89b80b2e82e0f8e38e730bf16b6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 de8cf10861569bda16536bf3c04f158a64eaf98cd0c09707fe8d6316edb7c8c0
MD5 2606521ea97ce2f5d067a96413814431
BLAKE2b-256 8372b630ce130a42873a97f4aef340ffa6e03e00e9b02f4403c48592d03e7cdb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 12f067c7d1fb71acda84997c7b2d2bb33bb70e9381fc7aebcede3c5141eed294
MD5 d83b842dc0a762ac6536c6b723b70603
BLAKE2b-256 1877735e76c7bcbbc92205b8648edb5cc200941f5d43530946b160da454e8151

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 927ccb6e8b9b0668c540062b098601fbc32156e55bbc0b49d42f25063cbda2a5
MD5 2f3cae9da7af4c8895fb6f9dacfd7b92
BLAKE2b-256 3e322cd36d0c2fb523fdc3a3e4c16e72d2156aba396b4c9e9c8e61fa1aae817e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 29201bda043172a8fd5b2b5ed969444e6d851da7f384847cdc27b9a5b72bded6
MD5 c93891c58063b524c953cd75b4d1feb1
BLAKE2b-256 952a4b8bf60943558854bf3fc80cac6b13e8bef4e294bc5648f219ba50b6b574

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for FindAFactor-5.1.2-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 ac19261d0a19bfcaa581228dbb59b3426d4bced21093bb492b26f1a7bc6712f8
MD5 abf59e039b2e420f5da03019fd80ea06
BLAKE2b-256 2c5c1159cb6f10b7ea67c6897fc565fdacf83f52e957607897c74801aeda49d9

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