Rational Numbers#
AUTHORS:
William Stein (2005): first version
William Stein (2006-02-22): floor and ceil (pure fast GMP versions).
Gonzalo Tornaria and William Stein (2006-03-02): greatly improved python/GMP conversion; hashing
William Stein and Naqi Jaffery (2006-03-06): height, sqrt examples, and improve behavior of sqrt.
David Harvey (2006-09-15): added nth_root
Pablo De Napoli (2007-04-01): corrected the implementations of multiplicative_order, is_one; optimized __bool__ ; documented: lcm,gcd
John Cremona (2009-05-15): added support for local and global logarithmic heights.
Travis Scrimshaw (2012-10-18): Added doctests for full coverage.
Vincent Delecroix (2013): continued fraction
Vincent Delecroix (2017-05-03): faster integer-rational comparison
Vincent Klein (2017-05-11): add __mpq__() to class Rational
Vincent Klein (2017-05-22): Rational constructor support gmpy2.mpq or gmpy2.mpz parameter. Add __mpz__ to class Rational.
- class sage.rings.rational.Q_to_Z#
Bases:
Map
A morphism from \(\QQ\) to \(\ZZ\).
- section()#
Return a section of this morphism.
EXAMPLES:
sage: sage.rings.rational.Q_to_Z(QQ, ZZ).section() Natural morphism: From: Integer Ring To: Rational Field
- class sage.rings.rational.Rational#
Bases:
FieldElement
A rational number.
Rational numbers are implemented using the GMP C library.
EXAMPLES:
sage: a = -2/3 sage: type(a) <class 'sage.rings.rational.Rational'> sage: parent(a) Rational Field sage: Rational('1/0') Traceback (most recent call last): ... TypeError: unable to convert '1/0' to a rational sage: Rational(1.5) 3/2 sage: Rational('9/6') 3/2 sage: Rational((2^99,2^100)) 1/2 sage: Rational(("2", "10"), 16) 1/8 sage: Rational(QQbar(125/8).nth_root(3)) 5/2 sage: Rational(AA(209735/343 - 17910/49*golden_ratio).nth_root(3) + 3*AA(golden_ratio)) 53/7 sage: QQ(float(1.5)) 3/2 sage: QQ(RDF(1.2)) 6/5
Conversion from fractions:
sage: import fractions sage: f = fractions.Fraction(1r, 2r) sage: Rational(f) 1/2
Conversion from PARI:
sage: Rational(pari('-939082/3992923')) -939082/3992923 sage: Rational(pari('Pol([-1/2])')) #9595 -1/2
Conversions from numpy:
sage: import numpy as np sage: QQ(np.int8('-15')) -15 sage: QQ(np.int16('-32')) -32 sage: QQ(np.int32('-19')) -19 sage: QQ(np.uint32('1412')) 1412 sage: QQ(np.float16('12')) 12
Conversions from gmpy2:
sage: from gmpy2 import * sage: QQ(mpq('3/4')) 3/4 sage: QQ(mpz(42)) 42 sage: Rational(mpq(2/3)) 2/3 sage: Rational(mpz(5)) 5
- absolute_norm()#
Return the norm from Q to Q of x (which is just x). This was added for compatibility with NumberFields
EXAMPLES:
sage: (6/5).absolute_norm() 6/5 sage: QQ(7/5).absolute_norm() 7/5
- additive_order()#
Return the additive order of
self
.OUTPUT: integer or infinity
EXAMPLES:
sage: QQ(0).additive_order() 1 sage: QQ(1).additive_order() +Infinity
- as_integer_ratio()#
Return the pair
(self.numerator(), self.denominator())
.EXAMPLES:
sage: x = -12/29 sage: x.as_integer_ratio() (-12, 29)
- ceil()#
Return the ceiling of this rational number.
OUTPUT: Integer
If this rational number is an integer, this returns this number, otherwise it returns the floor of this number +1.
EXAMPLES:
sage: n = 5/3; n.ceil() 2 sage: n = -17/19; n.ceil() 0 sage: n = -7/2; n.ceil() -3 sage: n = 7/2; n.ceil() 4 sage: n = 10/2; n.ceil() 5
- charpoly(var='x')#
Return the characteristic polynomial of this rational number. This will always be just
var - self
; this is really here so that code written for number fields won’t crash when applied to rational numbers.INPUT:
var
- a string
OUTPUT: Polynomial
EXAMPLES:
sage: (1/3).charpoly('x') x - 1/3
The default is var=’x’. (trac ticket #20967):
sage: a = QQ(2); a.charpoly('x') x - 2
AUTHORS:
Craig Citro
- conjugate()#
Return the complex conjugate of this rational number, which is the number itself.
EXAMPLES:
sage: n = 23/11 sage: n.conjugate() 23/11
- content(other)#
Return the content of
self
andother
, i.e. the unique positive rational number \(c\) such thatself/c
andother/c
are coprime integers.other
can be a rational number or a list of rational numbers.EXAMPLES:
sage: a = 2/3 sage: a.content(2/3) 2/3 sage: a.content(1/5) 1/15 sage: a.content([2/5, 4/9]) 2/45
- continued_fraction()#
Return the continued fraction of that rational.
EXAMPLES:
sage: (641/472).continued_fraction() [1; 2, 1, 3, 1, 4, 1, 5] sage: a = (355/113).continued_fraction(); a [3; 7, 16] sage: a.n(digits=10) 3.141592920 sage: pi.n(digits=10) 3.141592654
It’s almost pi!
- continued_fraction_list(type='std')#
Return the list of partial quotients of this rational number.
INPUT:
type
- either “std” (the default) for the standard continued fractions or “hj” for the Hirzebruch-Jung ones.
EXAMPLES:
sage: (13/9).continued_fraction_list() [1, 2, 4] sage: 1 + 1/(2 + 1/4) 13/9 sage: (225/157).continued_fraction_list() [1, 2, 3, 4, 5] sage: 1 + 1/(2 + 1/(3 + 1/(4 + 1/5))) 225/157 sage: (fibonacci(20)/fibonacci(19)).continued_fraction_list() [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2] sage: (-1/3).continued_fraction_list() [-1, 1, 2]
Check that the partial quotients of an integer
n
is simply[n]
:sage: QQ(1).continued_fraction_list() [1] sage: QQ(0).continued_fraction_list() [0] sage: QQ(-1).continued_fraction_list() [-1]
Hirzebruch-Jung continued fractions:
sage: (11/19).continued_fraction_list("hj") [1, 3, 2, 3, 2] sage: 1 - 1/(3 - 1/(2 - 1/(3 - 1/2))) 11/19 sage: (225/137).continued_fraction_list("hj") [2, 3, 5, 10] sage: 2 - 1/(3 - 1/(5 - 1/10)) 225/137 sage: (-23/19).continued_fraction_list("hj") [-1, 5, 4] sage: -1 - 1/(5 - 1/4) -23/19
- denom()#
Return the denominator of this rational number. denom is an alias of denominator.
EXAMPLES:
sage: x = -5/11 sage: x.denominator() 11 sage: x = 9/3 sage: x.denominator() 1 sage: x = 5/13 sage: x.denom() 13
- denominator()#
Return the denominator of this rational number. denom is an alias of denominator.
EXAMPLES:
sage: x = -5/11 sage: x.denominator() 11 sage: x = 9/3 sage: x.denominator() 1 sage: x = 5/13 sage: x.denom() 13
- factor()#
Return the factorization of this rational number.
OUTPUT: Factorization
EXAMPLES:
sage: (-4/17).factor() -1 * 2^2 * 17^-1
Trying to factor 0 gives an arithmetic error:
sage: (0/1).factor() Traceback (most recent call last): ... ArithmeticError: factorization of 0 is not defined
- floor()#
Return the floor of this rational number as an integer.
OUTPUT: Integer
EXAMPLES:
sage: n = 5/3; n.floor() 1 sage: n = -17/19; n.floor() -1 sage: n = -7/2; n.floor() -4 sage: n = 7/2; n.floor() 3 sage: n = 10/2; n.floor() 5
- gamma(prec=None)#
Return the gamma function evaluated at
self
. This value is exact for integers and half-integers, and returns a symbolic value otherwise. For a numerical approximation, use keywordprec
.EXAMPLES:
sage: gamma(1/2) sqrt(pi) sage: gamma(7/2) 15/8*sqrt(pi) sage: gamma(-3/2) 4/3*sqrt(pi) sage: gamma(6/1) 120 sage: gamma(1/3) gamma(1/3)
This function accepts an optional precision argument:
sage: (1/3).gamma(prec=100) 2.6789385347077476336556929410 sage: (1/2).gamma(prec=100) 1.7724538509055160272981674833
- global_height(prec=None)#
Return the absolute logarithmic height of this rational number.
INPUT:
prec
(int) – desired floating point precision (default: default RealField precision).
OUTPUT:
(real) The absolute logarithmic height of this rational number.
ALGORITHM:
The height is the sum of the total archimedean and non-archimedean components, which is equal to \(\max(\log(n),\log(d))\) where \(n,d\) are the numerator and denominator of the rational number.
EXAMPLES:
sage: a = QQ(6/25) sage: a.global_height_arch() + a.global_height_non_arch() 3.21887582486820 sage: a.global_height() 3.21887582486820 sage: (1/a).global_height() 3.21887582486820 sage: QQ(0).global_height() 0.000000000000000 sage: QQ(1).global_height() 0.000000000000000
- global_height_arch(prec=None)#
Return the total archimedean component of the height of this rational number.
INPUT:
prec
(int) – desired floating point precision (default: default RealField precision).
OUTPUT:
(real) The total archimedean component of the height of this rational number.
ALGORITHM:
Since \(\QQ\) has only one infinite place this is just the value of the local height at that place. This separate function is included for compatibility with number fields.
EXAMPLES:
sage: a = QQ(6/25) sage: a.global_height_arch() 0.000000000000000 sage: (1/a).global_height_arch() 1.42711635564015 sage: (1/a).global_height_arch(100) 1.4271163556401457483890413081
- global_height_non_arch(prec=None)#
Return the total non-archimedean component of the height of this rational number.
INPUT:
prec
(int) – desired floating point precision (default: default RealField precision).
OUTPUT:
(real) The total non-archimedean component of the height of this rational number.
ALGORITHM:
This is the sum of the local heights at all primes \(p\), which may be computed without factorization as the log of the denominator.
EXAMPLES:
sage: a = QQ(5/6) sage: a.support() [2, 3, 5] sage: a.global_height_non_arch() 1.79175946922805 sage: [a.local_height(p) for p in a.support()] [0.693147180559945, 1.09861228866811, 0.000000000000000] sage: sum([a.local_height(p) for p in a.support()]) 1.79175946922805
- height()#
The max absolute value of the numerator and denominator of
self
, as anInteger
.OUTPUT: Integer
EXAMPLES:
sage: a = 2/3 sage: a.height() 3 sage: a = 34/3 sage: a.height() 34 sage: a = -97/4 sage: a.height() 97
AUTHORS:
Naqi Jaffery (2006-03-05): examples
Note
For the logarithmic height, use
global_height()
.
- imag()#
Return the imaginary part of
self
, which is zero.EXAMPLES:
sage: (1/239).imag() 0
- is_S_integral(S=[])#
Determine if the rational number is
S
-integral.x
isS
-integral ifx.valuation(p)>=0
for allp
not inS
, i.e., the denominator ofx
is divisible only by the primes inS
.INPUT:
S
– list or tuple of primes.
OUTPUT: bool
Note
Primality of the entries in
S
is not checked.EXAMPLES:
sage: QQ(1/2).is_S_integral() False sage: QQ(1/2).is_S_integral([2]) True sage: [a for a in range(1,11) if QQ(101/a).is_S_integral([2,5])] [1, 2, 4, 5, 8, 10]
- is_S_unit(S=None)#
Determine if the rational number is an
S
-unit.x
is anS
-unit ifx.valuation(p)==0
for allp
not inS
, i.e., the numerator and denominator ofx
are divisible only by the primes in \(S\).INPUT:
S
– list or tuple of primes.
OUTPUT: bool
Note
Primality of the entries in
S
is not checked.EXAMPLES:
sage: QQ(1/2).is_S_unit() False sage: QQ(1/2).is_S_unit([2]) True sage: [a for a in range(1,11) if QQ(10/a).is_S_unit([2,5])] [1, 2, 4, 5, 8, 10]
- is_integer()#
Determine if a rational number is integral (i.e is in \(\ZZ\)).
OUTPUT: bool
EXAMPLES:
sage: QQ(1/2).is_integral() False sage: QQ(4/4).is_integral() True
- is_integral()#
Determine if a rational number is integral (i.e is in \(\ZZ\)).
OUTPUT: bool
EXAMPLES:
sage: QQ(1/2).is_integral() False sage: QQ(4/4).is_integral() True
- is_norm(L, element=False, proof=True)#
Determine whether
self
is the norm of an element ofL
.INPUT:
L
– a number fieldelement
– (default:False
) boolean whether to also output an element of whichself
is a normproof – If
True
, then the output is correct unconditionally. IfFalse
, then the output assumes GRH.
OUTPUT:
If element is
False
, then the output is a booleanB
, which isTrue
if and only ifself
is the norm of an element ofL
. Ifelement
isFalse
, then the output is a pair(B, x)
, whereB
is as above. IfB
isTrue
, thenx
an element ofL
such thatself == x.norm()
. Otherwise,x is None
.ALGORITHM:
Uses PARI’s bnfisnorm. See
_bnfisnorm()
.EXAMPLES:
sage: K = NumberField(x^2 - 2, 'beta') sage: (1/7).is_norm(K) True sage: (1/10).is_norm(K) False sage: 0.is_norm(K) True sage: (1/7).is_norm(K, element=True) (True, 1/7*beta + 3/7) sage: (1/10).is_norm(K, element=True) (False, None) sage: (1/691).is_norm(QQ, element=True) (True, 1/691)
The number field doesn’t have to be defined by an integral polynomial:
sage: B, e = (1/5).is_norm(QuadraticField(5/4, 'a'), element=True) sage: B True sage: e.norm() 1/5
A non-Galois number field:
sage: K.<a> = NumberField(x^3-2) sage: B, e = (3/5).is_norm(K, element=True); B True sage: e.norm() 3/5 sage: 7.is_norm(K) Traceback (most recent call last): ... NotImplementedError: is_norm is not implemented unconditionally for norms from non-Galois number fields sage: 7.is_norm(K, proof=False) False
AUTHORS:
Craig Citro (2008-04-05)
Marco Streng (2010-12-03)
- is_nth_power(n)#
Return
True
if self is an \(n\)-th power, elseFalse
.INPUT:
n
- integer (must fit in C int type)
Note
Use this function when you need to test if a rational number is an \(n\)-th power, but do not need to know the value of its \(n\)-th root. If the value is needed, use
nth_root()
.AUTHORS:
John Cremona (2009-04-04)
EXAMPLES:
sage: QQ(25/4).is_nth_power(2) True sage: QQ(125/8).is_nth_power(3) True sage: QQ(-125/8).is_nth_power(3) True sage: QQ(25/4).is_nth_power(-2) True sage: QQ(9/2).is_nth_power(2) False sage: QQ(-25).is_nth_power(2) False
- is_one()#
Determine if a rational number is one.
OUTPUT: bool
EXAMPLES:
sage: QQ(1/2).is_one() False sage: QQ(4/4).is_one() True
- is_padic_square(p, check=True)#
Determines whether this rational number is a square in \(\QQ_p\) (or in \(R\) when
p = infinity
).INPUT:
p
- a prime number, orinfinity
check
– (default:True
); check if \(p\) is prime
EXAMPLES:
sage: QQ(2).is_padic_square(7) True sage: QQ(98).is_padic_square(7) True sage: QQ(2).is_padic_square(5) False
- is_perfect_power(expected_value=False)#
Return
True
ifself
is a perfect power.INPUT:
expected_value
- (bool) whether or not this rational is expected be a perfect power. This does not affect the correctness of the output, only the runtime.
If
expected_value
isFalse
(default) it will check the smallest of the numerator and denominator is a perfect power as a first step, which is often faster than checking if the quotient is a perfect power.EXAMPLES:
sage: (4/9).is_perfect_power() True sage: (144/1).is_perfect_power() True sage: (4/3).is_perfect_power() False sage: (2/27).is_perfect_power() False sage: (4/27).is_perfect_power() False sage: (-1/25).is_perfect_power() False sage: (-1/27).is_perfect_power() True sage: (0/1).is_perfect_power() True
The second parameter does not change the result, but may change the runtime.
sage: (-1/27).is_perfect_power(True) True sage: (-1/25).is_perfect_power(True) False sage: (2/27).is_perfect_power(True) False sage: (144/1).is_perfect_power(True) True
This test makes sure we workaround a bug in GMP (see trac ticket #4612):
sage: [ -a for a in srange(100) if not QQ(-a^3).is_perfect_power() ] [] sage: [ -a for a in srange(100) if not QQ(-a^3).is_perfect_power(True) ] []
- is_rational()#
Return
True
since this is a rational number.EXAMPLES:
sage: (3/4).is_rational() True
- is_square()#
Return whether or not this rational number is a square.
OUTPUT: bool
EXAMPLES:
sage: x = 9/4 sage: x.is_square() True sage: x = (7/53)^100 sage: x.is_square() True sage: x = 4/3 sage: x.is_square() False sage: x = -1/4 sage: x.is_square() False
- list()#
Return a list with the rational element in it, to be compatible with the method for number fields.
OUTPUT:
list
- the list[self]
EXAMPLES:
sage: m = 5/3 sage: m.list() [5/3]
- local_height(p, prec=None)#
Return the local height of this rational number at the prime \(p\).
INPUT:
p
– a prime numberprec
(int) – desired floating point precision (default: default RealField precision).
OUTPUT:
(real) The local height of this rational number at the prime \(p\).
EXAMPLES:
sage: a = QQ(25/6) sage: a.local_height(2) 0.693147180559945 sage: a.local_height(3) 1.09861228866811 sage: a.local_height(5) 0.000000000000000
- local_height_arch(prec=None)#
Return the Archimedean local height of this rational number at the infinite place.
INPUT:
prec
(int) – desired floating point precision (default: default RealField precision).
OUTPUT:
(real) The local height of this rational number \(x\) at the unique infinite place of \(\QQ\), which is \(\max(\log(|x|),0)\).
EXAMPLES:
sage: a = QQ(6/25) sage: a.local_height_arch() 0.000000000000000 sage: (1/a).local_height_arch() 1.42711635564015 sage: (1/a).local_height_arch(100) 1.4271163556401457483890413081
- log(m=None, prec=None)#
Return the log of
self
.INPUT:
m
– the base (default: natural log base e)prec
– integer (optional); the precision in bits
OUTPUT:
When
prec
is not given, the log as an element in symbolic ring unless the logarithm is exact. Otherwise the log is aRealField
approximation toprec
bit precision.EXAMPLES:
sage: (124/345).log(5) log(124/345)/log(5) sage: (124/345).log(5,100) -0.63578895682825611710391773754 sage: log(QQ(125)) 3*log(5) sage: log(QQ(125), 5) 3 sage: log(QQ(125), 3) 3*log(5)/log(3) sage: QQ(8).log(1/2) -3 sage: (1/8).log(1/2) 3 sage: (1/2).log(1/8) 1/3 sage: (1/2).log(8) -1/3 sage: (16/81).log(8/27) 4/3 sage: (8/27).log(16/81) 3/4 sage: log(27/8, 16/81) -3/4 sage: log(16/81, 27/8) -4/3 sage: (125/8).log(5/2) 3 sage: (125/8).log(5/2,prec=53) 3.00000000000000
- minpoly(var='x')#
Return the minimal polynomial of this rational number. This will always be just
x - self
; this is really here so that code written for number fields won’t crash when applied to rational numbers.INPUT:
var
- a string
OUTPUT: Polynomial
EXAMPLES:
sage: (1/3).minpoly() x - 1/3 sage: (1/3).minpoly('y') y - 1/3
AUTHORS:
Craig Citro
- mod_ui(n)#
Return the remainder upon division of
self
by the unsigned long integern
.INPUT:
n
- an unsigned long integer
OUTPUT: integer
EXAMPLES:
sage: (-4/17).mod_ui(3) 1 sage: (-4/17).mod_ui(17) Traceback (most recent call last): ... ArithmeticError: The inverse of 0 modulo 17 is not defined.
- multiplicative_order()#
Return the multiplicative order of
self
.OUTPUT: Integer or
infinity
EXAMPLES:
sage: QQ(1).multiplicative_order() 1 sage: QQ('1/-1').multiplicative_order() 2 sage: QQ(0).multiplicative_order() +Infinity sage: QQ('2/3').multiplicative_order() +Infinity sage: QQ('1/2').multiplicative_order() +Infinity
- norm()#
Return the norm from \(\QQ\) to \(\QQ\) of \(x\) (which is just \(x\)). This was added for compatibility with
NumberFields
.OUTPUT:
Rational
- reference toself
EXAMPLES:
sage: (1/3).norm() 1/3
AUTHORS:
Craig Citro
- nth_root(n)#
Computes the \(n\)-th root of
self
, or raises aValueError
ifself
is not a perfect \(n\)-th power.INPUT:
n
- integer (must fit in C int type)
AUTHORS:
David Harvey (2006-09-15)
EXAMPLES:
sage: (25/4).nth_root(2) 5/2 sage: (125/8).nth_root(3) 5/2 sage: (-125/8).nth_root(3) -5/2 sage: (25/4).nth_root(-2) 2/5
sage: (9/2).nth_root(2) Traceback (most recent call last): ... ValueError: not a perfect 2nd power
sage: (-25/4).nth_root(2) Traceback (most recent call last): ... ValueError: cannot take even root of negative number
- numer()#
Return the numerator of this rational number. numer is an alias of numerator.
EXAMPLES:
sage: x = 5/11 sage: x.numerator() 5 sage: x = 9/3 sage: x.numerator() 3 sage: x = -5/11 sage: x.numer() -5
- numerator()#
Return the numerator of this rational number. numer is an alias of numerator.
EXAMPLES:
sage: x = 5/11 sage: x.numerator() 5 sage: x = 9/3 sage: x.numerator() 3 sage: x = -5/11 sage: x.numer() -5
- ord(p)#
Return the power of
p
in the factorization of self.INPUT:
p
- a prime number
OUTPUT:
(integer or infinity)
Infinity
ifself
is zero, otherwise the (positive or negative) integer \(e\) such thatself
= \(m*p^e\) with \(m\) coprime to \(p\).Note
See also
val_unit()
which returns the pair \((e,m)\). The functionord()
is an alias forvaluation()
.EXAMPLES:
sage: x = -5/9 sage: x.valuation(5) 1 sage: x.ord(5) 1 sage: x.valuation(3) -2 sage: x.valuation(2) 0
Some edge cases:
sage: (0/1).valuation(4) +Infinity sage: (7/16).valuation(4) -2
- period()#
Return the period of the repeating part of the decimal expansion of this rational number.
ALGORITHM:
When a rational number \(n/d\) with \((n,d)=1\) is expanded, the period begins after \(s\) terms and has length \(t\), where \(s\) and \(t\) are the smallest numbers satisfying \(10^s=10^{s+t} \mod d\). In general if \(d=2^a 5^b m\) where \(m\) is coprime to 10, then \(s=\max(a,b)\) and \(t\) is the order of 10 modulo \(m\).
EXAMPLES:
sage: (1/7).period() 6 sage: RR(1/7) 0.142857142857143 sage: (1/8).period() 1 sage: RR(1/8) 0.125000000000000 sage: RR(1/6) 0.166666666666667 sage: (1/6).period() 1 sage: x = 333/106 sage: x.period() 13 sage: RealField(200)(x) 3.1415094339622641509433962264150943396226415094339622641509
- prime_to_S_part(S=[])#
Return
self
with all powers of all primes inS
removed.INPUT:
S
- list or tuple of primes.
OUTPUT: rational
Note
Primality of the entries in \(S\) is not checked.
EXAMPLES:
sage: QQ(3/4).prime_to_S_part() 3/4 sage: QQ(3/4).prime_to_S_part([2]) 3 sage: QQ(-3/4).prime_to_S_part([3]) -1/4 sage: QQ(700/99).prime_to_S_part([2,3,5]) 7/11 sage: QQ(-700/99).prime_to_S_part([2,3,5]) -7/11 sage: QQ(0).prime_to_S_part([2,3,5]) 0 sage: QQ(-700/99).prime_to_S_part([]) -700/99
- real()#
Return the real part of
self
, which isself
.EXAMPLES:
sage: (1/2).real() 1/2
- relative_norm()#
Return the norm from Q to Q of x (which is just x). This was added for compatibility with NumberFields
EXAMPLES:
sage: (6/5).relative_norm() 6/5 sage: QQ(7/5).relative_norm() 7/5
- round(mode='away')#
Return the nearest integer to
self
, rounding away from 0 by default, for consistency with the builtin Python round.INPUT:
self
- a rational numbermode
- a rounding mode for half integers:‘toward’ rounds toward zero
‘away’ (default) rounds away from zero
‘up’ rounds up
‘down’ rounds down
‘even’ rounds toward the even integer
‘odd’ rounds toward the odd integer
OUTPUT: Integer
EXAMPLES:
sage: (9/2).round() 5 sage: n = 4/3; n.round() 1 sage: n = -17/4; n.round() -4 sage: n = -5/2; n.round() -3 sage: n.round("away") -3 sage: n.round("up") -2 sage: n.round("down") -3 sage: n.round("even") -2 sage: n.round("odd") -3
- sign()#
Return the sign of this rational number, which is -1, 0, or 1 depending on whether this number is negative, zero, or positive respectively.
OUTPUT: Integer
EXAMPLES:
sage: (2/3).sign() 1 sage: (0/3).sign() 0 sage: (-1/6).sign() -1
- sqrt(prec=None, extend=True, all=False)#
The square root function.
INPUT:
prec
– integer (default:None
): ifNone
, returns an exact square root; otherwise returns a numerical square root if necessary, to the given bits of precision.extend
– bool (default:True
); ifTrue
, return a square root in an extension ring, if necessary. Otherwise, raise aValueError
if the square is not in the base ring.all
– bool (default:False
); ifTrue
, return all square roots of self, instead of just one.
EXAMPLES:
sage: x = 25/9 sage: x.sqrt() 5/3 sage: sqrt(x) 5/3 sage: x = 64/4 sage: x.sqrt() 4 sage: x = 100/1 sage: x.sqrt() 10 sage: x.sqrt(all=True) [10, -10] sage: x = 81/5 sage: x.sqrt() 9*sqrt(1/5) sage: x = -81/3 sage: x.sqrt() 3*sqrt(-3)
sage: n = 2/3 sage: n.sqrt() sqrt(2/3) sage: n.sqrt(prec=10) 0.82 sage: n.sqrt(prec=100) 0.81649658092772603273242802490 sage: n.sqrt(prec=100)^2 0.66666666666666666666666666667 sage: n.sqrt(prec=53, all=True) [0.816496580927726, -0.816496580927726] sage: n.sqrt(extend=False, all=True) Traceback (most recent call last): ... ValueError: square root of 2/3 not a rational number sage: sqrt(-2/3, all=True) [sqrt(-2/3), -sqrt(-2/3)] sage: sqrt(-2/3, prec=53) 0.816496580927726*I sage: sqrt(-2/3, prec=53, all=True) [0.816496580927726*I, -0.816496580927726*I]
AUTHORS:
Naqi Jaffery (2006-03-05): some examples
- squarefree_part()#
Return the square free part of \(x\), i.e., an integer z such that \(x = z y^2\), for a perfect square \(y^2\).
EXAMPLES:
sage: a = 1/2 sage: a.squarefree_part() 2 sage: b = a/a.squarefree_part() sage: b, b.is_square() (1/4, True) sage: a = 24/5 sage: a.squarefree_part() 30
- str(base=10)#
Return a string representation of
self
in the givenbase
.INPUT:
base
– integer (default: 10); base must be between 2 and 36.
OUTPUT: string
EXAMPLES:
sage: (-4/17).str() '-4/17' sage: (-4/17).str(2) '-100/10001'
Note that the base must be at most 36.
sage: (-4/17).str(40) Traceback (most recent call last): ... ValueError: base (=40) must be between 2 and 36 sage: (-4/17).str(1) Traceback (most recent call last): ... ValueError: base (=1) must be between 2 and 36
- support()#
Return a sorted list of the primes where this rational number has non-zero valuation.
OUTPUT: The set of primes appearing in the factorization of this rational with nonzero exponent, as a sorted list.
EXAMPLES:
sage: (-4/17).support() [2, 17]
Trying to find the support of 0 gives an arithmetic error:
sage: (0/1).support() Traceback (most recent call last): ... ArithmeticError: Support of 0 not defined.
- trace()#
Return the trace from \(\QQ\) to \(\QQ\) of \(x\) (which is just \(x\)). This was added for compatibility with
NumberFields
.OUTPUT:
Rational
- reference to self
EXAMPLES:
sage: (1/3).trace() 1/3
AUTHORS:
Craig Citro
- trunc()#
Round this rational number to the nearest integer toward zero.
EXAMPLES:
sage: (5/3).trunc() 1 sage: (-5/3).trunc() -1 sage: QQ(42).trunc() 42 sage: QQ(-42).trunc() -42
- val_unit(p)#
Return a pair: the \(p\)-adic valuation of
self
, and the \(p\)-adic unit ofself
, as aRational
.We do not require the \(p\) be prime, but it must be at least 2. For more documentation see
Integer.val_unit()
.INPUT:
p
- a prime
OUTPUT:
int
- the \(p\)-adic valuation of this rationalRational
- \(p\)-adic unit part ofself
EXAMPLES:
sage: (-4/17).val_unit(2) (2, -1/17) sage: (-4/17).val_unit(17) (-1, -4) sage: (0/1).val_unit(17) (+Infinity, 1)
AUTHORS:
David Roe (2007-04-12)
- valuation(p)#
Return the power of
p
in the factorization of self.INPUT:
p
- a prime number
OUTPUT:
(integer or infinity)
Infinity
ifself
is zero, otherwise the (positive or negative) integer \(e\) such thatself
= \(m*p^e\) with \(m\) coprime to \(p\).Note
See also
val_unit()
which returns the pair \((e,m)\). The functionord()
is an alias forvaluation()
.EXAMPLES:
sage: x = -5/9 sage: x.valuation(5) 1 sage: x.ord(5) 1 sage: x.valuation(3) -2 sage: x.valuation(2) 0
Some edge cases:
sage: (0/1).valuation(4) +Infinity sage: (7/16).valuation(4) -2
- class sage.rings.rational.Z_to_Q#
Bases:
Morphism
A morphism from \(\ZZ\) to \(\QQ\).
- is_surjective()#
Return whether this morphism is surjective.
EXAMPLES:
sage: QQ.coerce_map_from(ZZ).is_surjective() False
- section()#
Return a section of this morphism.
EXAMPLES:
sage: f = QQ.coerce_map_from(ZZ).section(); f Generic map: From: Rational Field To: Integer Ring
This map is a morphism in the category of sets with partial maps (see trac ticket #15618):
sage: f.parent() Set of Morphisms from Rational Field to Integer Ring in Category of sets with partial maps
- sage.rings.rational.integer_rational_power(a, b)#
Compute \(a^b\) as an integer, if it is integral, or return
None
.The nonnegative real root is taken for even denominators.
INPUT:
a – an
Integer
b – a nonnegative
Rational
OUTPUT:
\(a^b\) as an
Integer
orNone
EXAMPLES:
sage: from sage.rings.rational import integer_rational_power sage: integer_rational_power(49, 1/2) 7 sage: integer_rational_power(27, 1/3) 3 sage: integer_rational_power(-27, 1/3) is None True sage: integer_rational_power(-27, 2/3) is None True sage: integer_rational_power(512, 7/9) 128 sage: integer_rational_power(27, 1/4) is None True sage: integer_rational_power(-16, 1/4) is None True sage: integer_rational_power(0, 7/9) 0 sage: integer_rational_power(1, 7/9) 1 sage: integer_rational_power(-1, 7/9) is None True sage: integer_rational_power(-1, 8/9) is None True sage: integer_rational_power(-1, 9/8) is None True
TESTS (trac ticket #11228):
sage: integer_rational_power(-10, QQ(2)) 100 sage: integer_rational_power(0, QQ(0)) 1
- sage.rings.rational.is_Rational(x)#
Return true if x is of the Sage rational number type.
EXAMPLES:
sage: from sage.rings.rational import is_Rational sage: is_Rational(2) False sage: is_Rational(2/1) True sage: is_Rational(int(2)) False sage: is_Rational('5') False
- class sage.rings.rational.long_to_Q#
Bases:
Morphism
A morphism from Python 2
long
/Python 3int
to \(\QQ\).
- sage.rings.rational.make_rational(s)#
Make a rational number from
s
(a string in base 32)INPUT:
s
- string in base 32
OUTPUT: Rational
EXAMPLES:
sage: (-7/15).str(32) '-7/f' sage: sage.rings.rational.make_rational('-7/f') -7/15
- sage.rings.rational.rational_power_parts(a, b, factor_limit=100000)#
Compute rationals or integers \(c\) and \(d\) such that \(a^b = c*d^b\) with \(d\) small. This is used for simplifying radicals.
INPUT:
a
– a rational or integerb
– a rationalfactor_limit
– the limit used in factoringa
EXAMPLES:
sage: from sage.rings.rational import rational_power_parts sage: rational_power_parts(27, 1/2) (3, 3) sage: rational_power_parts(-128, 3/4) (8, -8) sage: rational_power_parts(-4, 1/2) (2, -1) sage: rational_power_parts(-4, 1/3) (1, -4) sage: rational_power_parts(9/1000, 1/2) (3/10, 1/10)