As part of MATH 571, you will need to complete extended problems using a computer. You are free to use whatever computer software/language you like. For example, if you really wanted to, you could program everything from scratch in C or C++, or could use existing (free) libraries to assist you. You could even program in Malboge. (I don't necessarily recommend these approaches.) But more likely than not, you will want to use higher-level "calculator" software that has been built with typical number-theoretic computations in mind. This page gives some information about the systems I know about.

WARNING --- it is up to you to acquire suitable software to use, to install it on your own computer/tablet/device, and to learn to use it. This sounds like a daunting task, but actually it's not that bad. All the things I describe below have excellent documentation and user communities, so they are easy to work with (programming them is like programming MATLAB or something similar). And anyway, this is what happens in "real life". You show up at a technical job and your boss immediately wants you to figure out how to compute blahbity-blah on OS blah, and needs it done yesterday. In such environments it is generally expected that you will be able to proceed quickly and without complaint (otherwise, they will just hire someone else who can do it). So it's worth investing time into this. Indeed, if you can do this you will have acquired a valuable (and marketable) skill.

This is a calculator designed for researchers in number theory. It is very fast, has all the functionality one could need for this course, and its scripting language is very easy to learn. I use it daily in my own research, so I'm very familiar with it; it will be the software of choice for class demonstrations. The downside (for some) is that it is terminal-based; there is no fancy GUI or web "worksheet" interface. However if you are old skool like me you don't want that junk anyway. Many excellent tutorials are available online. You can also use it as a C library (indeed, the original intent of the GP calculator was as a convenient interface for the underlying Pari library).

Available (free) from here.

This is a large computer algebra system that incorporates many mathematical computing packages under one roof. In particular it uses the Pari library to implement the number theory computations. Sage is built on Python and so if you are familiar with the latter you will likely be comfortable with Sage. It has a browser "worksheet" interface that many find comfortable. Sage is also becoming more well-known as an analytical tool in the real world, although at the moment not as much as Mathematica. So knowledge of Sage could be a marketable skill.

Available (free) from here.

I will try to add a sample Sage session.

Mathematica is one of the oldest computer algebra systems; probably you have used it in other courses, or via the Wolfram Alpha web service. One downside is that it was not designed with number theorists in mind, so the support for elliptic curves is pretty weak. However it is possible to implement formulas for ECC directly in Mathematica (explicit formulas are given in the textbook), and I might be asking you to do that anyway :) so it could be used for our course.

Mathematica is not free, but as a UMass student you can get it free. Futhermore, according to OIT, Mathematica is available in the computer classrooms on campus.

Mathematica skills are definitely marketable, because it is frequently used in analytical settings. It looks good on your CV.

I will try to add a sample Mathematica session.

MAGMA is a general purpose computer algebra system along the same lines as Mathematica, but it was designed with pure mathematics researchers in mind (unlike Mathematica). I am not as familiar with it, but lots of my colleagues use it, and I think it would not be hard to pick it up. MAGMA is also not free, but I believe it is free for anyone working at a US university (in particular with a .edu email address).

Available from here.

These may or may not be helpful to you, but they are out there and may help you do some computations. If you find anything on your own that you think I should know about, let me know and I'll put a link here.

- NTL C++ library for number theory. From the documentation --- NTL is a high-performance, portable C++ library providing data structures and algorithms for arbitrary length integers; for vectors, matrices, and polynomials over the integers and over finite fields; and for arbitrary precision floating point arithmetic.
- MIRACL C library for multiprecision arithmetic. From the documentation --- This Portable C library implements a full implementation of Multiprecision Arithmetic. In particular it includes all the primitives necessary to implement Number Theoretic based methods for Public Key Cryptography and Digital signature, such as Diffie Hellman, Elliptic curves, RSA and DSS. Indeed example programs implement many of these methods.
- Perl module for basic ECC computations
- Python library for ECC

Revised: Mon Jan 23 12:43:13 EST 2017

Paul Gunnells

gunnells at math dot umass dot edu