blob: d060c2d3b2ac3b117165008ca8f0ee2a5c098635 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
{-# 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.Integer.GMP.Internals as I
gcdExtInteger :: Integer -> Integer -> (Integer, Integer)
gcdExtInteger a b = case I.gcdExtInteger a b of (# g, s #) -> (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
|