congruence {elliptic} | R Documentation |
Solves mx+by=1 for x and y
Description
Solves the Diophantine equation for
and
. The function is named for equation 57 in Hardy and Wright.
Usage
congruence(a, l = 1)
Arguments
a |
Two element vector with |
l |
Right hand side with default 1 |
Value
In the usual case of , returns a square matrix
whose rows are
a
and c(x,y)
. This matrix is a unimodular
transformation that takes a pair of basic periods to another pair of
basic periods.
If then more than one solution is
available (for example
congruence(c(4,6),2)
). In this case, extra rows
are added and the matrix is no longer square.
Note
This function does not generate all unimodular matrices with a given first row (here, it will be assumed that the function returns a square matrix).
For a start, this function only returns matrices all of whose
elements are positive, and if a
is unimodular, then after
diag(a) <- -diag(a)
, both a
and -a
are
unimodular (so if a
was originally generated by
congruence()
, neither of the derived matrices could be).
Now if the first row is c(1,23)
, for example, then the second
row need only be of the form c(n,1)
where n
is any
integer. There are thus an infinite number of unimodular matrices
whose first row is c(1,23)
. While this is (somewhat)
pathological, consider matrices with a first row of, say,
c(2,5)
. Then the second row could be c(1,3)
, or
c(3,8)
or c(5,13)
. Function congruence()
will
return only the first of these.
To systematically generate all unimodular matrices, use
unimodular()
, which uses Farey sequences.
Author(s)
Robin K. S. Hankin
References
G. H. Hardy and E. M. Wright 1985. An introduction to the theory of numbers, Oxford University Press (fifth edition)
See Also
Examples
M <- congruence(c(4,9))
det(M)
o <- c(1,1i)
g2.fun(o) - g2.fun(o,maxiter=840) #should be zero