prime factors decomposition

This commit is contained in:
sam.hadow committed 2026-10-17 13:35:55 +02:00
1 parent bac5cb38bc
commit 9d1b785282
3 files changed
+97 -2

No files matched your search

+19 -2
View File
@@ -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)