modular square root UI

This commit is contained in:
2026-01-12 13:47:05 +01:00
parent 2e0cbfe714
commit a45f29178a
3 changed files with 24 additions and 2 deletions

View File

@@ -2,19 +2,20 @@ module Main where
import Utils (askChoice)
import qualified FactorizationUI
import qualified ModularSquareRootUI
import qualified PrimesUI
main :: IO ()
main = do
putStrLn "Haskell Math Toolkit"
putStrLn "1) Factorization"
putStrLn "2) Modular square root (not yet implemented)"
putStrLn "2) Modular square root"
putStrLn "3) Primality tests"
choice <- askChoice 3
case choice of
1 -> FactorizationUI.run
2 -> putStrLn "Modular square root: not implemented yet."
2 -> ModularSquareRootUI.run
3 -> PrimesUI.run
_ -> error "Impossible"

View File

@@ -0,0 +1,20 @@
module ModularSquareRootUI (run) where
import Utils (askNumber)
import ModularSquareRoot (tonelliShanks)
run :: IO ()
run = do
putStrLn "Modular square root (TonelliShanks)"
putStrLn "Solve x^2 = n (mod p), with p an odd prime."
n <- askNumber "Enter n:"
p <- askNumber "Enter prime modulus p:"
case tonelliShanks n p of
Just x -> do
putStrLn "Solution found:"
putStrLn ("x = " ++ show x ++ " (mod " ++ show p ++ ")")
putStrLn ("Other root: " ++ show ((p - x) `mod` p))
Nothing ->
putStrLn "No square root exists modulo p."