arithmoi-0.8.0.0: Efficient basic number-theoretic functions.

Copyright(c) 2016 Andrew Lelechenko
LicenseMIT
MaintainerAndrew Lelechenko <andrew.lelechenko@gmail.com>
StabilityProvisional
PortabilityNon-portable (GHC extensions)
Safe HaskellNone
LanguageHaskell2010

Math.NumberTheory.ArithmeticFunctions

Contents

Description

This module provides an interface for defining and manipulating arithmetic functions. It also defines several most widespreaded arithmetic functions.

Synopsis

Documentation

data ArithmeticFunction n a where #

A typical arithmetic function operates on the canonical factorisation of a number into prime's powers and consists of two rules. The first one determines the values of the function on the powers of primes. The second one determines how to combine these values into final result.

In the following definition the first argument is the function on prime's powers, the monoid instance determines a rule of combination (typically Product or Sum), and the second argument is convenient for unwrapping (typically, getProduct or getSum).

Constructors

ArithmeticFunction :: Monoid m => (Prime n -> Word -> m) -> (m -> a) -> ArithmeticFunction n a 
Instances
Functor (ArithmeticFunction n) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Methods

fmap :: (a -> b) -> ArithmeticFunction n a -> ArithmeticFunction n b #

(<$) :: a -> ArithmeticFunction n b -> ArithmeticFunction n a #

Applicative (ArithmeticFunction n) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Floating a => Floating (ArithmeticFunction n a) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Fractional a => Fractional (ArithmeticFunction n a) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Num a => Num (ArithmeticFunction n a) #

Factorisation is expensive, so it is better to avoid doing it twice. Write 'runFunction (f + g) n' instead of 'runFunction f n + runFunction g n'.

Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Semigroup a => Semigroup (ArithmeticFunction n a) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

Monoid a => Monoid (ArithmeticFunction n a) # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Class

runFunction :: UniqueFactorisation n => ArithmeticFunction n a -> n -> a #

Convert to function. The value on 0 is undefined.

Multiplicative functions

multiplicative :: Num a => (Prime n -> Word -> a) -> ArithmeticFunction n a #

Create a multiplicative function from the function on prime's powers. See examples below.

divisors :: (UniqueFactorisation n, Num n, Ord n) => n -> Set n #

divisorsA :: forall n. (UniqueFactorisation n, Num n, Ord n) => ArithmeticFunction n (Set n) #

The set of all (positive) divisors of an argument.

divisorsList :: (UniqueFactorisation n, Num n) => n -> [n] #

divisorsListA :: forall n. (UniqueFactorisation n, Num n) => ArithmeticFunction n [n] #

The unsorted list of all (positive) divisors of an argument, produced in lazy fashion.

divisorsSmallA :: forall n. Prime n ~ Prime Int => ArithmeticFunction n IntSet #

Same as divisors, but with better performance on cost of type restriction.

tau :: (UniqueFactorisation n, Num a) => n -> a #

tauA :: Num a => ArithmeticFunction n a #

The number of (positive) divisors of an argument.

tauA = multiplicative (\_ k -> k + 1)

sigma :: (UniqueFactorisation n, Integral n) => Word -> n -> n #

sigmaA :: forall n. (UniqueFactorisation n, Integral n) => Word -> ArithmeticFunction n n #

The sum of the k-th powers of (positive) divisors of an argument.

sigmaA = multiplicative (\p k -> sum $ map (p ^) [0..k])
sigmaA 0 = tauA

totient :: (UniqueFactorisation n, Num n) => n -> n #

totientA :: forall n. (UniqueFactorisation n, Num n) => ArithmeticFunction n n #

Calculates the totient of a positive number n, i.e. the number of k with 1 <= k <= n and gcd n k == 1, in other words, the order of the group of units in ℤ/(n).

jordan :: (UniqueFactorisation n, Num n) => Word -> n -> n #

jordanA :: forall n. (UniqueFactorisation n, Num n) => Word -> ArithmeticFunction n n #

Calculates the k-th Jordan function of an argument.

jordanA 1 = totientA

ramanujanA :: ArithmeticFunction Integer Integer #

Calculates the Ramanujan tau function of a positive number n, using formulas given here

moebiusA :: ArithmeticFunction n Moebius #

Calculates the Möbius function of an argument.

data Moebius #

Represents three possible values of Möbius function.

Constructors

MoebiusN

−1

MoebiusZ

0

MoebiusP

1

Instances
Eq Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Methods

(==) :: Moebius -> Moebius -> Bool #

(/=) :: Moebius -> Moebius -> Bool #

Ord Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Show Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Semigroup Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Monoid Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Unbox Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

Vector Vector Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

MVector MVector Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

newtype Vector Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

newtype MVector s Moebius # 
Instance details

Defined in Math.NumberTheory.ArithmeticFunctions.Moebius

runMoebius :: Num a => Moebius -> a #

Convert to any numeric type.

liouville :: (UniqueFactorisation n, Num a) => n -> a #

liouvilleA :: Num a => ArithmeticFunction n a #

Calculates the Liouville function of an argument.

Additive functions

additive :: Num a => (Prime n -> Word -> a) -> ArithmeticFunction n a #

Create an additive function from the function on prime's powers. See examples below.

smallOmega :: (UniqueFactorisation n, Num a) => n -> a #

smallOmegaA :: Num a => ArithmeticFunction n a #

Number of distinct prime factors.

smallOmegaA = additive (\_ _ -> 1)

bigOmegaA :: ArithmeticFunction n Word #

Number of prime factors, counted with multiplicity.

bigOmegaA = additive (\_ k -> k)

Misc

carmichaelA :: forall n. (UniqueFactorisation n, Integral n) => ArithmeticFunction n n #

Calculates the Carmichael function for a positive integer, that is, the (smallest) exponent of the group of units in ℤ/(n).

expMangoldt :: (UniqueFactorisation n, Num n) => n -> n #

expMangoldtA :: forall n. (UniqueFactorisation n, Num n) => ArithmeticFunction n n #

The exponent of von Mangoldt function. Use log expMangoldtA to recover von Mangoldt function itself.