arithmoi-0.12.0.2: Efficient basic number-theoretic functions.
Copyright(c) 2018 Alexandre Rodrigues Baldé
LicenseMIT
MaintainerAlexandre Rodrigues Baldé <alexandrer_b@outlook.com>
Safe HaskellNone
LanguageHaskell2010

Math.NumberTheory.Quadratic.EisensteinIntegers

Description

This module exports functions for manipulating Eisenstein integers, including computing their prime factorisations.

Synopsis

Documentation

data EisensteinInteger Source #

An Eisenstein integer is a + bω, where a and b are both integers.

Constructors

!Integer :+ !Integer infix 6 

Instances

Instances details
Eq EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Num EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Ord EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Show EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Generic EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Associated Types

type Rep EisensteinInteger :: Type -> Type #

NFData EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Methods

rnf :: EisensteinInteger -> () #

GcdDomain EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Euclidean EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Semiring EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

Ring EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

UniqueFactorisation EisensteinInteger Source #

See the source code and Haddock comments for the factorise and isPrime functions in this module (they are not exported) for implementation details.

Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

type Rep EisensteinInteger Source # 
Instance details

Defined in Math.NumberTheory.Quadratic.EisensteinIntegers

type Rep EisensteinInteger = D1 ('MetaData "EisensteinInteger" "Math.NumberTheory.Quadratic.EisensteinIntegers" "arithmoi-0.12.0.2-1LBW47IaiR6Hp9NDnAlXcl" 'False) (C1 ('MetaCons ":+" ('InfixI 'NotAssociative 6) 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Integer)))

ω :: EisensteinInteger Source #

The imaginary unit for Eisenstein integers, where

ω == (-1/2) + ((sqrt 3)/2)ι == exp(2*pi*ι/3)

and ι is the usual imaginary unit with ι² == -1.

conjugate :: EisensteinInteger -> EisensteinInteger Source #

Conjugate a Eisenstein integer.

norm :: EisensteinInteger -> Integer Source #

The square of the magnitude of a Eisenstein integer.

associates :: EisensteinInteger -> [EisensteinInteger] Source #

Produce a list of an EisensteinInteger's associates.

ids :: [EisensteinInteger] Source #

List of all Eisenstein units, counterclockwise across all sextants, starting with 1.

Primality functions

findPrime :: Prime Integer -> Prime EisensteinInteger Source #

Find an Eisenstein integer whose norm is the given prime number in the form 3k + 1.

>>> import Math.NumberTheory.Primes (nextPrime)
>>> findPrime (nextPrime 7)
Prime 3+2*ω

primes :: [Prime EisensteinInteger] Source #

An infinite list of Eisenstein primes. Uses primes in Z to exhaustively generate all Eisenstein primes in order of ascending norm.

  • Every prime is in the first sextant, so the list contains no associates.
  • Eisenstein primes from the whole complex plane can be generated by applying associates to each prime in this list.
>>> take 10 primes
[Prime 2+ω,Prime 2,Prime 3+2*ω,Prime 3+ω,Prime 4+3*ω,Prime 4+ω,Prime 5+3*ω,Prime 5+2*ω,Prime 5,Prime 6+5*ω]