| Copyright | (c) 2016 Chris Fredrickson Google Inc. |
|---|---|
| License | MIT |
| Maintainer | Chris Fredrickson <chris.p.fredrickson@gmail.com> |
| Stability | Provisional |
| Portability | Non-portable (GHC extensions) |
| Safe Haskell | None |
| Language | Haskell2010 |
Math.NumberTheory.GaussianIntegers
Description
This module exports functions for manipulating Gaussian integers, including computing their prime factorisations.
Synopsis
- data GaussianInteger = (:+) !Integer !Integer
- ι :: GaussianInteger
- real :: GaussianInteger -> Integer
- imag :: GaussianInteger -> Integer
- conjugate :: GaussianInteger -> GaussianInteger
- norm :: GaussianInteger -> Integer
- divModG :: GaussianInteger -> GaussianInteger -> (GaussianInteger, GaussianInteger)
- divG :: GaussianInteger -> GaussianInteger -> GaussianInteger
- modG :: GaussianInteger -> GaussianInteger -> GaussianInteger
- quotRemG :: GaussianInteger -> GaussianInteger -> (GaussianInteger, GaussianInteger)
- quotG :: GaussianInteger -> GaussianInteger -> GaussianInteger
- remG :: GaussianInteger -> GaussianInteger -> GaussianInteger
- (.^) :: Integral a => GaussianInteger -> a -> GaussianInteger
- isPrime :: GaussianInteger -> Bool
- primes :: [GaussianInteger]
- gcdG :: GaussianInteger -> GaussianInteger -> GaussianInteger
- gcdG' :: GaussianInteger -> GaussianInteger -> GaussianInteger
- findPrime :: Integer -> GaussianInteger
- findPrime' :: Integer -> GaussianInteger
- factorise :: GaussianInteger -> [(GaussianInteger, Int)]
Documentation
data GaussianInteger #
A Gaussian integer is a+bi, where a and b are both integers.
Instances
ι :: GaussianInteger #
The imaginary unit, where
ι .^ 2 == -1
real :: GaussianInteger -> Integer #
imag :: GaussianInteger -> Integer #
conjugate :: GaussianInteger -> GaussianInteger #
Conjugate a Gaussian integer.
norm :: GaussianInteger -> Integer #
The square of the magnitude of a Gaussian integer.
divModG :: GaussianInteger -> GaussianInteger -> (GaussianInteger, GaussianInteger) #
divG :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Gaussian integer division, truncating toward negative infinity.
modG :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Gaussian integer remainder, satisfying
(x `divG` y)*y + (x `modG` y) == x
quotG :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Gaussian integer division, truncating toward zero.
remG :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Gaussian integer remainder, satisfying
(x `quotG` y)*y + (x `remG` y) == x
(.^) :: Integral a => GaussianInteger -> a -> GaussianInteger infixr 8 #
Raise a Gaussian integer to a given power.
isPrime :: GaussianInteger -> Bool #
Compute whether a given Gaussian integer is prime.
primes :: [GaussianInteger] #
An infinite list of the Gaussian primes. Uses primes in Z to exhaustively generate all Gaussian primes, but not quite in order of ascending magnitude.
gcdG :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Compute the GCD of two Gaussian integers. Enforces the precondition that each integer must be in the first quadrant (or zero).
gcdG' :: GaussianInteger -> GaussianInteger -> GaussianInteger #
Compute the GCD of two Gauss integers. Does not check the precondition.
findPrime :: Integer -> GaussianInteger #
Find a Gaussian integer whose norm is the given prime number.
Checks the precondition that p is prime and that p mod 4 /= 3.
findPrime' :: Integer -> GaussianInteger #
Find a Gaussian integer whose norm is the given prime number. Does not check the precondition.
factorise :: GaussianInteger -> [(GaussianInteger, Int)] #
Compute the prime factorisation of a Gaussian integer. This is unique up to units (+- 1, +- i).