Havens' Haven

Subtitle: Chakravala in a Taxicab

I have never done anything “useful”. No discovery of mine has made, or is likely to make, directly or indirectly, for good or ill, the least difference to the amenity of the world.

— G. H. Hardy

Christopher Havens

If you were facing a 25 year stretch for murder and had landed in solitary for a while, you might think to yourself, “Maybe this would be a good time to catch up on some number theory”. Something like this occurred to Christopher Havens when he was convicted of murdering Randen Robinson and sent to the Washington State Monroe Correctional Complex northeast of Seattle. He had dropped out of high school, began using drugs, and killed Robinson during a drug-related dispute. After his conviction, bad behavior sent him to solitary confinement for a year.

While in solitary, Havens started working puzzles and then realized that the guards were handing out math problems to other prisoners. He did as much math as they could provide, quickly learning calculus and number theory, but eventually exceeded the guards’ ability to keep up with his level.

Chris Havens

Chris Havens

That’s when he sent this letter that eventually arrived on the desk of Matthew Cargo, editor for Mathematical Sciences Publishers, whose partner Marta Cerruti is Associate Professor of Materials Engineering at McGill University.

Havens' letter to Matthew Cargo.

Havens Letter

Her parents are mathematicians and her father, Umberto Cerruti, is a number theorist at the University of Torino in Italy. Umberto Cerruti sent Havens a problem to work on, and Christopher wrote back with a long, complicated solution that turned out to be correct.

Christopher has since published a paper jointly with Cerruti and two other mathematicians, in the journal Research in Number Theory, “Linear fractional transformations and nonlinear leaping convergents of some continued fractions”. He hopes to inspire other prisoners through mathematics and has started the Prison Mathematics Project (PMP) to connect inmates with mathematicians. They hold bi-weekly meetings to discuss math problems and work on larger projects. Beginning in 2016 the PMP has been holding Pi Day celebrations.

“You should never set aside your dreams and goals and dismiss them as impossible just because you are institutionally challenged,” Havens said. “Today is not just a day to celebrate pi, but mathematics as a whole and celebrate an opportunity we have to move our lives in a positive direction.”

Besides having a research paper published, Chris also submitted a problem to Math Horizons, a magazine published by the Mathematical Association of America (MAA) meant to be accessible to undergraduate mathematics majors. The problem is this, What is the smallest positive integer yy such that 1729y2+11729y^2 + 1 is a perfect square? This is a form of Pell’s Equation, and there’s a connection to the mathematicians Srinivasa Ramanujan and G. H. Hardy.

Ramanujan was a self-taught mathematician from India who produced thousands of new ideas in number theory. In early January 1913, he sent a letter with some of his results to Hardy who was at Cambridge at the time. Later, Hardy said that the letters were “certainly the most remarkable I have received” and that Ramanujan was “a mathematician of the highest quality, a man of altogether exceptional originality and power”. He invited Ramanujan to visit him in England, and Ramanujan arrived in April 1914.

Ramanujan (22 December 1887 – 26 April 1920) was ill most of his short life and Hardy visited him while he was in the hospital.

I remember once going to see him when he was ill at Putney. I had ridden in taxi cab number 1729 and remarked that the number seemed to me rather a dull one, and that I hoped it was not an unfavourable omen. “No,” he replied, “it is a very interesting number; it is the smallest number expressible as the sum of two cubes in two different ways.”

1729=13+123=93+1031729 = 1^3 + 12^3 = 9^3 + 10^3

The number 17291729 is now known as a taxicab number or the Ramanujan-Hardy number and is the number Havens chose for the problem. The drawing at the top of Hardy and Ramanujan was done by Chris Havens.

Pell’s Equations

Pell’s equations are in the form

x2ny2=1x^2 - ny^2 = 1

for integers x,yx,y, and nn. The problem that Chris Havens proposed is to find xx and yy such that x2=1729y2+1x^2 = 1729y^2 + 1, which can be rearranged into a Pell equation,

x21729y2=1.x^2 - 1729y^2 = 1.

In the 7th century, Indian mathematician and astronomer Brahmagupta first studied equations in this form (he called it the Varga-Prakriti equation), and Pell had nothing to do with them. This is an example of Stigler’s Law of Eponymy, named for University of Chicago statistics professor Stephen Stigler, which says that no scientific discovery is named after its original discoverer. Stigler’s Law is itself an example, having been earlier described by sociologist Robert K. Merton. Leonard Euler misattributed the equations to Pell rather than to the several earlier mathematicians who worked on similar equations including Diophantus, Bhāskara II, Narayaṇa Paṇḍita, William Brouncker, and Pierre de Fermat.

The equations are hyperbolic functions and have solutions at points where both xx and yy are integers. This is an example of the equation x22y2=1x^2 - 2y^2 = 1 plotted in Desmos. Use x^2-2y^2=1 to plot the function, and plot solutions in the form (x,y)(x,y) as shown on the second line.


Pell's Equation in Desmos

In the 12th century, Bhāskara II (1114–1185) continued the work of Brahmagupta (598–670) and developed an algorithm for finding solutions that he called the Chakravala Method.

The Chakravala

Bhāskara named his method Chakra (meaning “wheel”) because of its iterative nature. Shailesh Shirali is a mathematician at the Sahyadri School in India who wrote “The Chakravala Method - Zeroing in on a Solution” in the mathematics journal At Right Angles. This description of the Chakravala is from his paper.

The first step to understanding the Chakravala comes from the Diophantus-Brahmagupta-Fibonacci identity,

(a2+b2)(c2+d2)=(adbc)2+(ac+bd)2=(ad+bc)2+(acbd)2.\begin{aligned} (a^2+b^2)(c^2+d^2) &= (ad-bc)^2 + (ac+bd)^2 \\ &= (ad+bc)^2 + (ac-bd)^2. \end{aligned}

Brahmagupta extended this to

(a2nb2)(c2nd2)=(ac+nbd)2n(ad+bc)2=(acnbd)2n(adnbc)2.\begin{aligned} (a^2-nb^2)(c^2-nd^2) &= (ac+nbd)^2 - n(ad+bc)^2 \\ &= (ac - nbd)^2 - n(ad-nbc)^2. \end{aligned}

It’s not clear how these identities were discovered, but they are easy to verify by expanding and collecting terms. You can start to see how the Chakravala works for finding integer solutions to the equation x2ny2=kx^2-ny^2 = k if we already have two solutions,

a2nb2=k1c2nd2=k2\begin{aligned} a^2-nb^2 = k_1 \\ c^2-nd^2 = k_2 \end{aligned}


(ac+nbd)2n(ad+bc)2=k1k2.(ac+nbd)^2 - n(ad+bc)^2 = k_1k_2.

To complete the method, we need Bhāskarā’s lemma which says that if a2nb2=ka^2-nb^2 = k, then

(ma+nbk)2n(a+bmk)2=m2nk,\left( \frac{ma+nb}{k} \right)^2 - n \left( \frac{a+bm}{k} \right)^2 = \frac{m^2-n}{k},

which can be easily verified with expansion and collection of terms.

Given a non-square positive integer nn, we’re looking for a solution to x2ny2=kx^2 - ny^2 = k. If we have two solutions [a,b,k1][a,b,k_1] and [c,d,k2][c,d,k_2] a third solution [u,v,k1×k2][u,v,k_1 \times k_2] can be generated from the Brahmagupta identity using

u=ac+nbdv=ad+bc.\begin{aligned} u &= ac + nbd \\ v &= ad + bc. \end{aligned}

Suppose n=10n=10 and we have two solutions [7,2,9][7,2,9] and [11,3,31][11,3,31] meaning that

7210×22=9 and 11210×32=31.7^2-10 \times 2^2 = 9 \text{ and } 11^2 - 10 \times 3^2 = 31.

Using the equations for uu and vv,

u=7×11+10(2×3)=77+60=137v=7×3+2×11=21+22=43,\begin{aligned} u &= 7 \times 11 + 10(2 \times 3) = 77 + 60 = 137 \\ v &= 7 \times 3 + 2 \times 11 = 21 + 22 = 43, \end{aligned}

gives a new solution [137,43,9×31]=[137,43,279][137,43,9 \times 31] = [137,43,279],

137210×432=1876918490=279.137^2 - 10 \times 43^2 = 18769 - 18490 = 279.

If we already have one triple [a,b,k1][a,b,k_1] that works, a second one can be derived by using (m)2n×12=m2n(m)^2 - n \times 1^2 = m^2-n giving the triple [c,d,k2]=[m,1,m2n][c,d,k_2] =[m,1,m^2-n] and calculating a new uu and vv,

u=ma+nbv=a+bm\begin{aligned} u &= ma + nb \\ v &= a + bm \end{aligned}


u2nv2=(ma+nb)2n(a+bm)2=k1(m2n).u^2 - nv^2 = (ma+nb)^2 - n(a+bm)^2 = k_1(m^2 - n).

The trick to finding a solution for x2ny2=1x^2 - ny^2 = 1 is to start with an “almost” solution and iterate using the Chakravala until k(m2n)=1k(m^2-n) = 1. Finding [a,b,k1][a,b,k_1] is done by letting b=1b=1 and then setting aa to the nearest integer greater than n\sqrt{n} so that a2n=k1a^2 - n = k_1 gives the smallest positive integer k1k_1. From Bhāskarā’s, lemma we need a+bma + bm to be evenly divisible by k1k_1 and m2m^2 to be as close to nn as possible. The steps in the algorithm are,

Repeat the second and third steps until k=1k' = 1.

Does the Chakravala ever end, or does the wheel keep on turning? Fortunately, the algorithm converges, that is, it eventually gets to k=1k=1. The proof is given by A. Bauval in “An elementary proof of the halting property for the Chakravala Algorithm”.

But to make the Chakravala work requires understanding modular arithmetic.

Modular Arithmetic

In number theory it’s often useful to describe a number by its remainder when divided by another number, so if

a=qn+ra = qn+r

then nn goes into aa qq times with a remainder of rr. An example is the angle when going around a circle:


θ mod π in Desmos

If the circle has a radius of 11, then the angle θ\theta ranges from 00 to 2π2 \pi, but once it gets back to the xx-axis the remainder resets to 00. That is, you can’t tell from looking at where the pointer is whether it’s gone around zero times, once, twice, or more. The sloped lines in this plot represent the remainder of the angle after dividing by 2π2 \pi. Usually, the numbers a,q,na,q,n, and rr are integers and the equation is often written as

a=r mod(n)a = r \text{ mod}(n)

meaning that the remainder when aa is divided by nn is rr, or “aa equals rr modulo nn”. The qq is missing in the equation because it’s the integer number of times that nn divides aa, and we’re only interested in the remainder rr.

If a=r1 mod(n)a = r_1 \text{ mod}(n) and b=r2 mod(n)b = r_2 \text{ mod}(n) then a+b=r1+r2 mod(n)a+b = r_1 + r_2 \text{ mod}(n), since

a=q1n+r1b=q2n+r2a+b=(q1n+r1)+(q2n+r2)=(q1+q2)n+(r1+r2)=r1+r2 mod(n)\begin{aligned} a &= q_1 n + r_1 \\ b &= q_2n+r_2 \\ a+b &= (q_1 n + r_1) + (q_2 n + r_2) \\ &= (q_1 + q_2) n + (r_1 + r_2) \\ &= r_1 + r_2 \text{ mod}(n) \end{aligned}

For example, 14=4 mod(5)14 = 4 \text{ mod}(5) and 17=2 mod(5)17 = 2 \text{ mod}(5) so 14+17=31=1 mod(5)14+17 = 31 = 1 \text{ mod}(5). Of course, adding 4+2=64+2 = 6 so you have to apply the modulus again to get 6=1 mod(5)6 = 1 \text{ mod}(5). Subtraction works the same way with ab=(q1n+r1)(q2n+r2)a - b = (q_1 n + r_1) - (q_2 n + r_2).

You can multiply numbers modulo nn. Using the same notation from above,

a×b=(q1n+r1)×(q2n+r2)=q1q2n2+q1r2n+q2r1n+r1r2=(q1q2n+q1r2+q2r1)n+r1r2=r1r2 mod(n)\begin{aligned} a \times b &= (q_1 n + r_1) \times (q_2 n + r_2) \\ &= q_1 q_2 n^2 + q_1 r_2 n + q_2 r_1 n + r_1 r_2 \\ &= (q_1 q_2 n + q_1 r_2 + q_2 r_1)n + r_1 r_2 \\ &= r_1 r_2 \text{ mod}(n) \end{aligned}

So, 14×17=238=3 mod(5)14 \times 17 = 238 = 3 \text{ mod} (5) and 4×2=8=3 mod(5)4 \times 2 = 8 = 3 \text{ mod}(5).

The only arithmetic operation left is division. Since 10=4 mod(6)10 = 4 \text{ mod}(6) it would be convenient if we could divide both sides by 22 to get 102=5=42=2 mod(6)\frac{10}{2} = 5 = \frac{4}{2} = 2 \text{ mod}(6), but clearly, that’s wrong, 52 mod(6)5 \neq 2 \text{ mod}(6). The division operation that we’re used to means that if

xy=z\frac{x}{y} = z


x=yz.x = yz.

If the solution to dividing xx by yy is zz, then multiplication reverses this, so yy times zz must equal xx. We need an equivalent for modulo division. Suppose there are two numbers z1z_1 and z2z_2 such that multiplication by yy gives the same answer modulo nn,

z1y=z2y mod(n).z_1y = z_2y \text{ mod}(n).

This means that z1y=q1n+r1z_1y = q_1 n + r_1 and z2y=q2n+r2z_2y = q_2n + r_2 for some q1,q2,r1q_1,q_2,r_1 and r2r_2. Since z1y=z2y mod(n)z_1y = z_2y \text{ mod}(n) then r1=r2r_1 = r_2, so

z1y=q1n=q2n=z2yz1yz2y=(z1z2)y=kn\begin{aligned} z_1y &= q_1n = q_2n = z_2y \\ z_1y - z_2y &= (z_1 - z_2)y = kn \end{aligned}

for some integer kk. We can find a solution to the division problem using the greatest common divisor of nn and yy.

The greatest common divisor (gcd) of two integers is the largest integer that divides both of them. To find the gcd, find the prime factors of each, and then take the product of all the common factors,

60=22×3×518=2×32gcd(60,18)=2×3=6\begin{aligned} 60 &= 2^2 \times 3 \times 5 \\ 18 &= 2 \times 3^2 \\ gcd(60,18) &= 2 \times 3 = 6 \end{aligned}

Suppose the gcd(n,y)=dgcd(n,y) = d and that dyd \neq y. The second condition means that yy does not divide evenly into nn. Divide nn by dd to get some integer g=ndg = \frac{n}{d}. Now gg is also a divisor of nn since d=ngd = \frac{n}{g}, but gg can’t be a divisor of yy because if it were, then both dd and gg would be divisors of nn, as would the product dgdg meaning that dd wasn’t really the greatest common divisor. So, if g=ndg = \frac{n}{d} doesn’t go evenly into yy, then it must divide z1z2z_1 - z_2, since

(z1z2)y=kn.(z_1-z_2)y = kn.

This means that

z1y=z2y mod(n)z_1y = z_2y \text{ mod}(n)

only when

z1=z2 mod(nd).z_1 = z_2 \text{ mod}\left( \frac{n}{d} \right).

So, a unique solution exists only when the gcd(n,y)=1gcd(n,y) = 1. In this case, nn and yy are said to be relatively prime or coprime. Let’s go back to the original problem of finding y1=1yy^{-1} = \frac{1}{y} such that xy1=z mod(n)x y^{-1} = z \text{ mod}(n). One way to find y1y^{-1} would be to check every element of the set 1,2,,n{1,2, \ldots, n} until we find a solution. But there’s a faster way using the greatest common divisor method discovered by Euclid.

The Euclidian Algorithm

Euclid’s algorithm is a more practical method for finding the greatest common divisor of two numbers than listing their prime factors and then calculating the product of their common factors. Suppose you want to find gcd(a,b)gcd(a,b) where a>ba > b. Now, a=q1b+r1a = q_1b + r_1, and b=q2r1+r2b = q_2r_1 + r_2 for some q1,q2,r1,r2q_1,q_2,r_1,r_2. Write r1r_1 in terms of r2r_2: r1=q3r2+r3r_1 = q_3r_2 + r_3. Maybe you find that r3=0r_3 = 0, meaning that r2r_2 is a divisor of r1r_1. Then,

b=q2(q3r2)+r2=(q2q3+1)r2b = q_2(q_3r_2)+r_2 = (q_2q_3+1)r_2


a=q1b+r1=q1(q2q3+1)r2+r1=q1(q2q3+1)r2+q3r2=(q1(q2q3+1)+1)r2.\begin{aligned} a &= q_1b+r_1 = q_1(q_2q_3+1)r_2 + r_1 \\ &= q_1(q_2q_3+1)r_2 + q_3r_2 \\ &= (q_1(q_2q_3+1) + 1) r_2. \end{aligned}

This means that r2r_2 divides both aa and bb and if we let w=q2q3+1w = q_2q_3+1 then b=wr2b = w r_2 and a=(q1w+1)r2a = (q_1w+1)r_2, so r2r_2 is the largest divisor of both aa and bb.

Using the example from above, we’ll find the gcd(60,18)gcd(60,18) using the Euclidean Algorithm:

60=3×18+618=3×6+0gcd(60,18)=6.\begin{aligned} 60 &= 3 \times 18 + 6 \\ 18 &= 3 \times 6 + 0 \\ &\Rightarrow gcd(60,18) = 6. \end{aligned}

We get the answer in just two steps, and no factorization is needed. If r3r_3 isn’t zero, continue the process until some rn=0r_n = 0.

The Euclidean Algorithm can be extended to solve problems such as

ax+by=c.ax+by = c.

As an example, let’s start by finding the greatest common divisor of 3333 and 2727,

33=1×27+627=4×6+36=2×3+0gcd(33,27)=3.\begin{aligned} 33 &= 1 \times 27 + 6 \\ 27 &= 4 \times 6 + 3 \\ 6 &= 2 \times 3 + 0 \\ &\Rightarrow \text{gcd}(33,27) = 3. \end{aligned}

Now, suppose we want to solve

3=33a+27b.3 = 33a + 27b.

From the gcd calculation above,

6=331×27,3=274×6\begin{aligned} 6 &= 33 - 1 \times 27, \\ 3 &= 27 - 4 \times 6 \\ \end{aligned}

Replace the 66 in the second equation with the one from the first to get

3=274×(331×27)=4×33+(1+4)×27=4×33+5×27.\begin{aligned} 3 &= 27 - 4 \times (33 - 1 \times 27) \\ &= -4 \times 33 + (1 + 4) \times 27 \\ &= -4 \times 33 + 5 \times 27. \end{aligned}

so a=4a = -4 and b=5b = 5.

Modular Division

Going back to the division equation above,

xy=zx=yzx=yz+kn\begin{aligned} \frac{x}{y} &= z \\ x &= y z \\ \Rightarrow x &= y z + k n \end{aligned}

In other words, if the solution to dividing xx by yy is zz, then in modular arithmetic terms (modulo nn), xx is yy times zz plus some constant multiple kk of nn. This is exactly the extended Euclidean algorithm for the gcd that we just did. If yy and nn are coprime, meaning gcd(n,y)=1gcd(n,y)=1, then from the extended Euclidean algorithm there are integers rr and ss such that

1=ry+sn1 = ry + sn


z=rx+tnk=szty\begin{aligned} z &= rx + tn \\ k &= sz - ty \end{aligned}

for every integer tt. Here’s the trick - when you calculate 1=ry+sn mod(n)1 = ry + sn \text{ mod} (n) the term with snsn is zero because nn is a divisor. So what’s left is

1=ry mod(n)1 = ry \text{ mod}(n)

which means that

r=1y mod(n)r = \frac{1}{y} \text{ mod}(n)

so rr is the inverse of yy.

If gcd(n,y)=d>1gcd(n,y) = d > 1 and xx is an integer multiple of dd, then

z=r+tndk=styd,\begin{aligned} z &= r + t \frac{n}{d} \\[1.5em] k &= s - t \frac{y}{d}, \end{aligned}

but there won’t be a unique solution modulo nn (but there will be modulo n/dn/d).

We now have methods for calculating addition, subtraction, multiplication, and under special conditions, division modulo nn, and with the Chakravala algorithm we can find the solution to any Pell’s equation.

The Algorithm

To solve the equation

a2nb2=1a^2-nb^2 = 1

for a given positive integer nn, start with values for [a,b,k][a,b,k] and gcd(a,b)=1gcd(a,b)=1. An easy choice for bb is 11 since setting aa to the next larger integer to n\sqrt{n} makes kk small.

If k=1k' = 1 we have a solution, otherwise find a new mm satisfying the constraint and iterate until k=1k' = 1.

Finding mm such that kk divides a+bma+bm means that there is some jj such that

a+bm=jka + bm = jk


bm=a  mod(k)bm = -a \; \text{mod}(k)

Using the extended Euclidean algorithm, we can find 1b mod k\frac{1}{b} \text{ mod } k and an integer tt such that

t=(a1b) mod(k).t = \left(-a \frac{1}{b} \right) \text{ mod}(k).

The mm that satisfies a+bm=0 mod(k)a + bm = 0 \text{ mod}(k) and minimizes m2n|m^2 - n| will have a remainder of tt when divided by kk, so it’s just a matter of finding the multiple jj,

Let n=17n = 17 and start with [a,b,k]=[5,1,8][a,b,k] = [5,1,8], so 5217×12=85^2 - 17 \times 1^2 = 8. Then we want 5+1×m=8j5 + 1 \times m = 8j. This is equivalent to

1×m=5=3  mod(8).1 \times m = -5 = 3 \; \text{mod}(8).

When b=1b=1 the problem is trivial because mm has to be in the set {3,11,19,27,}={85,165,245,325,}\{3,11,19,27, \ldots \} = \{8-5,16-5,24-5,32-5, \ldots \}. For n=17n=17, m2n|m^2-n| is minimized when m=3m=3. Update a,b,a,b, and kk,

ama+nbk=3×5+17×18=4ba+bmk=5+1×38=1km2nk=32178=1\begin{aligned} a' &\leftarrow \frac{ma+nb}{|k|} = \frac{3 \times 5 + 17 \times 1}{|8|} = 4 \\[1.5em] b' &\leftarrow \frac{a+bm}{|k|} = \frac{5 + 1 \times 3}{|8|} = 1 \\[1.5em] k' &\leftarrow \frac{m^2-n}{k} = \frac{3^2 - 17}{8} = -1 \end{aligned}

Calculating a new value for mm, we need 4+1×m4 + 1 \times m to be divisible by k=1k = -1, and so any value of mm will do, and the value that minimizes m2n|m^2 - n| is 44. Updating the values for a,ba,b, and kk give a=33a = 33, b=8b = 8 and k=1k = 1, so the algorithm stops with

33217×82=1108917×64=10891088=1.\begin{aligned} 33^2 - 17 \times 8^2 &= 1 \\ 1089 - 17 \times 64 &= 1089 - 1088 = 1. \end{aligned}

Using the PARI/GP language, the code chakravala.gp finds the smallest values of aa and bb for a given nn. This is a screenshot of the solution to Chris Havens’ problem with the Ramanujan-Hardy Taxicab number 1729:


The Prison Mathematics Project

The Prison Mathematics Projects likes to hear from people willing to volunteer time to help inmates improve their math skills. From the website,

In early 2012, a prisoner by the name Christopher Havens began studying mathematics for the very first time within the prison inside of prison. Christopher was in a form of isolation that we call solitary confinement… prisoners know it as “the hole”. Having no other form of stimulation, mathematics occupied every hour of Christopher’s days, lasting the better part of a year until he was released back into the general population. In so many cases, the negative effects of prolonged isolation manifests itself through the behaviors in both the short and the long term. However, this case is one where a mix of isolation and the transformative powers of mathematics caused Christopher to undergo a steady chain of personal growth while igniting within him a passion for mathematics.

If you have some ability in mathematics and would like to volunteer, you can submit your name and email address, and the PMP will connect you with an inmate to become their “pen pal”. Donations are also greatly appreciated.


Image credits

Hero: Mathematical Association of America, Pi Day Behind Bars Doing Mathematics In Prison, Luisella Caire, Umberto Cerruti, Gary Gordon

Chris Havens: MAA, Pi Day Behind Bars Doing Mathematics In Prison

Havens Letter: The Conversation, An inmate’s love for math leads to new discoveries, Marta Cerruti May 14, 2020

Pell’s Equation in Desmos: Desmos Studio Calculator

Code for this article

chakravala.gp - Solves the Brahmagupta (Pell) equation using the chakravala method.



Desmos is an advanced graphing calculator implemented as a web application and a mobile application. In addition to graphing both equations and inequalities, it also features lists, plots, regressions, interactive variables, graph restriction, simultaneous graphing, piece wise function graphing, polar function graphing, two types of graphing grids – among other computational features commonly found in a programmable calculator.

Posts using Desmos


PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves, modular forms, L functions…), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers etc., and a lot of transcendental functions.

Posts using Pari/GP

See all software used on wildpeaches →

# Reach out!

If you have any questions or comments regarding this article you can visit this thread on GitHub discussions or email us directly