Skip to main content

No project description provided

Project description

factorizer

This is a simple factorization tool.

Here is the simplest example.

from factorizer import BruteForceFactorizer
divider = BruteForceFactorizer() 
divider.factorize(57) # Devide number in order, starting with 2, 3, 4, 5...
#>>>(3, 19)

Install

Requirements

  • boost

if you are using apt, you can install with

apt install libboost-dev

Install

Install with pip and GitHub

pip install git+https://github.com/FullteaOfEEIC/factorizer.git

Install with PyPI

pip install factorizer

Usage

Basic Usage

first, import package

from factorizer import BruteForceFactorizer

BruteForceFactorizer trys dividing given number with 2, 3, 4, 5...

All Methods in this package are listed below.

second, create a object

divider = BruteForceFactorizer()

then, call factorize() method to factorize a number.

divider.factorize(57)
#>>> (3, 19)

You will receive the tuple, whose length are 2 and the product of those are the given number.

That's all!!

Setting Timeout

When you try to factorize some large numbers, what we care is whether the calculation ends in a short period. While we can't predict the required time, we provide time out method instead.

from factorizer import BruteForceFactorizer

divider = BruteForceFactorizer()
facts = divider.factorize(221) # This takes less than 1 second.
print(facts) # >>> (13, 17) 
facts = divider.factorize(144483604528043653279487) # This takes about 40 seconds in my environment.
print(facts) # >>> (2147483647, 67280421310721)

Now you can set timeout for divider.

from factorizer import BruteForceFactorizer

divider = BruteForceFactorizer(timeout=5)
facts = divider.factorize(221)
print(facts) # >>> (13, 17) 
facts = divider.factorize(144483604528043653279487) # This raises timeout error after 5 seconds.
# >>> factorizer.TimeOutError

Factorize Methods

BruteForceFactorizer

This method searches factors by dividing a given number sequential(2, 3, 4, ...sqrt(n)). This is useful when n is small or n has small factors.

from factorizer import BruteForceFactorizer

n = 21
divider = BruteForceFactorizer(timeout=5)
facts = divider.factorize(n)
assert n == facts[0] * facts[1]
print(facts) # >>> (3, 7)

FermatFactorizer

This method searches factors by using Fermat's factorization method. This is useful when two factors of the given numbers are similar sizes.

from factorizer import FermatFactorizer

n = 17094896531810236860130284769490321915294047711310368136394905170386978916759334950349117125605720936295486193376534502996558346954298821541237678202872064373159864453975455700275218336138295073109837853052911442982249175483147894454735060228013876333548456070708161754022653432247114865681934678336369669630310417775703125135381535339600363990582556226874678712573925886711666498382111760727570796847908646797570295191362260110871270300928038772025787352463090061558150045455638071691578922379413464004696514186854056461649591756647526422083918100655183395966280798720122926503397649310956601613684952853243575941193

divider = FermatFactorizer(timeout=5)
facts = divider.factorize(n)
assert n == facts[0] * facts[1]
print(facts) # >>> (130747453251718202865367599610984256344049976791406031337536420100072758990497257029481575106895700732897562067500860599588866977471195605540443529953122402713181190128830424125700106569684526840827976181922955582670800429750099675311621080502576741880521124560628733981949754441379686189254362646041261993641, 130747453251718202865367599610984256344049976791406031337536420100072758990497257029481575106895700732897562067500860599588866977471195605540443529953122402713181190128830424125700106569684526840827976181922955582670800429750099675311621080502576741880521124560628733981949754441379686189254362646041262989473)

PollardsRhoFactorizer

This method searches factors by using Pollard's rho algorithm.

from factorizer import PollardsRhoFactorizer

n = 115792089237316195423570985008687907853269984665640564039457584007913129639937

divider = PollardsRhoFactorizer(c=1, timeout=300)
facts = divider.factorize(n)
assert n == facts[0] * facts[1]
print(facts) # >>> (1238926361552897, 93461639715357977769163558199606896584051237541638188580280321)

RSAPrivateKeyFactorizer

This methods factorize a value of RSA public key using a private key.

from factorizer import RSAPrivateKeyFactorizer

n = 27686602223927069809508667129651371574022939911012945899001963424465432485857959278558567281517986710814493093153793525047594117727967922805090645353064983356364587573528439400605242106130103131384993204101341653150290978652895046371555816803503680877880178698972551411830684046183050273503256489746735122896322889851233107319826830407170825219504026080487291571593984998811061039563352881755150841596074226928497041576188756112952655828168668354006968017555707521724480003190926244967186018315461915028536777617724701916068306698854834025206955234552798984323325634496632645984709079699996404187769159304233647822817
d = 24519437769149139138866335660847545755165653484828286006043516748645401856648854182027545432645741317052553200888752554950064278086138490312456491085827725315522539371158133921466167994259596651442467698644153219537709818896410096455515199158877483530710370808678561483477316661434979292218578919768993187556392027276261818313248453442745589939088057747368431718456807618716287398645113323934099505504696161971119193577301554819446410886001798824782611510559183940960340872731200080537116249824675375515706234728334218799881290646607824216835997567209464899473615916775422544955890417233691031033339957172951014984193
e = 65537

divider = RSAPrivateKeyFactorizer(timeout=5)
facts = divider.factorize(n=n, d=d, e=e)
assert n == facts[0] * facts[1]
print(facts) # >>> (164440261485392965958742019246770416320932920696954972063153653746118661265309225245866288630607809128837646403488126759943170796688209694380633475245468531031317968059042232976590058634563033374276851700592039029913560594799947875803213408972945984053103732205589545833939222174651819219655132052468407371273, 168368755764757999709509937248353083024339876032843327089346146791177263807954202500513372878263241247260384327152524628645952463666883718555038702070451982789684092744140047859634766283935579015168962695374570234745026167687949972650110320372983580614771069456603621708761065756833056697404158656939419138329)

FactorDBFactorizer

Factor DB is a great database to store known factors for many numbers. This method get factors from Factor DB.

from factorizer import FactorDBFactorizer

n = 57

divider = FactorDBFactorizer(timeout=5)
facts = divider.factorize(n)
assert n == facts[0] * facts[1]
print(facts) # >>> (3, 19)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

factorizer-0.9.6.tar.gz (8.5 kB view details)

Uploaded Source

Built Distributions

factorizer-0.9.6-cp310-cp310-macosx_11_0_x86_64.whl (103.7 kB view details)

Uploaded CPython 3.10 macOS 11.0+ x86-64

factorizer-0.9.6-cp38-cp38-manylinux1_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8

File details

Details for the file factorizer-0.9.6.tar.gz.

File metadata

  • Download URL: factorizer-0.9.6.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.1

File hashes

Hashes for factorizer-0.9.6.tar.gz
Algorithm Hash digest
SHA256 e568350dd50e17fe99e61d937c29d7437157ddc184d274525371db3368a93432
MD5 deb29969764dcfb4afece2c7e2a1c634
BLAKE2b-256 1f18ec9f1d4d016bfe0fc5202457b10282d337bdf2002669c556009f40c6a3b2

See more details on using hashes here.

File details

Details for the file factorizer-0.9.6-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: factorizer-0.9.6-cp310-cp310-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 103.7 kB
  • Tags: CPython 3.10, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.1

File hashes

Hashes for factorizer-0.9.6-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 36f566bb28464ddad9adb45390f2c04c5cace3c100d3192ec9188b0c7a65cb0e
MD5 77f7c42fcfba7fd9eadcb663b41495a7
BLAKE2b-256 08f1316d534c099fe9483175a17ff967f01ebc76433c574f79b0425b5227cfcb

See more details on using hashes here.

File details

Details for the file factorizer-0.9.6-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: factorizer-0.9.6-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.1

File hashes

Hashes for factorizer-0.9.6-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2b0028458ad8a405d4f119707ef1d4a70eb380df96a71dae6791b407a8f7e177
MD5 1bef4a6f029a9de851837d55731ed931
BLAKE2b-256 644c8718afb8b6e0fafcbe62a165a48ca2cac261bead395599b24297db2d9b4b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page