prime factors decomposition
This commit is contained in:
1 parent
bac5cb38bc
commit
9d1b785282
3 files changed
+97
-2
No files matched your search
+19
-2
@@ -2,6 +2,7 @@ module FactorizationUI (run) where
|
||||
|
||||
import System.Exit (exitSuccess)
|
||||
import Utils (askChoice, askNumber)
|
||||
import PrimeFactors (primeFactors, formatFactors)
|
||||
import Factorization
|
||||
( fermatFactorization, pollardPminus1, dixon, dixonDefaultParams
|
||||
, gnfsWith, GNFSParams(..), defaultParams
|
||||
@@ -14,14 +15,16 @@ run = do
|
||||
putStrLn "2) Pollard p-1"
|
||||
putStrLn "3) Dixon"
|
||||
putStrLn "4) General Number Field Sieve (GNFS)"
|
||||
putStrLn "5) Prime factors (GNFS)"
|
||||
|
||||
choice <- askChoice 4
|
||||
choice <- askChoice 5
|
||||
|
||||
case choice of
|
||||
1 -> fermatUI
|
||||
2 -> pollardUI
|
||||
3 -> dixonUI
|
||||
4 -> gnfsUI
|
||||
5 -> primeFactorsUI
|
||||
_ -> error "Impossible"
|
||||
|
||||
fermatUI :: IO ()
|
||||
@@ -47,7 +50,7 @@ dixonUI :: IO ()
|
||||
dixonUI = do
|
||||
putStrLn "Dixon"
|
||||
putStrLn "Factors a composite n (not a prime, a perfect square or a prime power)."
|
||||
putStrLn "Practical for n up to roughly 22 digits; 24 digits already takes about a minute."
|
||||
putStrLn "Practical for n up to roughly 22 digits; 24 digits already takes a minute or two."
|
||||
n <- askNumber "Enter an integer n > 1:"
|
||||
|
||||
putStrLn "Parameters:"
|
||||
@@ -118,3 +121,17 @@ gnfsUI = do
|
||||
putStrLn ("n = " ++ show n)
|
||||
putStrLn ("p = " ++ show p)
|
||||
putStrLn ("q = " ++ show q)
|
||||
|
||||
primeFactorsUI :: IO ()
|
||||
primeFactorsUI = do
|
||||
putStrLn "Prime factors (GNFS)"
|
||||
putStrLn "Decomposes n into its prime factors."
|
||||
putStrLn "Large composites are split with the General Number Field Sieve, so numbers with more than about 30 digits may take very long."
|
||||
n <- askNumber "Enter an integer n > 1:"
|
||||
|
||||
putStrLn "Running (this may take a while)..."
|
||||
case primeFactors n of
|
||||
Left err ->
|
||||
putStrLn ("Error: " ++ err)
|
||||
Right factors ->
|
||||
putStrLn (show n ++ " = " ++ formatFactors factors)
|
||||
Reference in new issue
Block a user