{-# LANGUAGE UnboxedTuples #-} module Main (main) where import Data.List (group) import Data.Bits import Data.Word import Control.Monad import GHC.Word import GHC.Base import qualified GHC.Num.Integer as I gcdExtInteger :: Integer -> Integer -> (Integer, Integer) gcdExtInteger a b = case I.integerGcde a b of ( g, s, _t ) -> (g, s) main :: IO () main = do print $ gcdExtInteger b e print $ gcdExtInteger e b print $ gcdExtInteger x y print $ gcdExtInteger y x print $ gcdExtInteger x (-y) print $ gcdExtInteger (-x) y print $ gcdExtInteger (-x) (-y) -- see #15350 do let a = 2 b = 2^65 + 1 print $ gcdExtInteger a b print $ gcdExtInteger a (-b) print $ gcdExtInteger (-a) b print $ gcdExtInteger (-a) (-b) print $ gcdExtInteger b a print $ gcdExtInteger b (-a) print $ gcdExtInteger (-b) a print $ gcdExtInteger (-b) (-a) where b = 2988348162058574136915891421498819466320163312926952423791023078876139 e = 2351399303373464486466122544523690094744975233415544072992656881240319 m = 10^(40::Int) x = 5328841272400314897981163497728751426 y = 32052182750761975518649228050096851724