In the computational projects you will be asked to implement and explore various algorithms described in class. You are free to use whatever software you like to do this, but it is expected that you will be implementing the algorithms as requested and not using built-in functions. For instance, in the Shanks project you will implement baby-step, giant-step to find primitive roots. Many programs, such as gp-pari, have built in functions to perform this, and of course the point is not simply to run these functions. However, built-in functions can be used to test your implementations, and I encourage you to do this.

I will be assigning you randomly (using the unix function sort -R) to groups of 4,4,3,3 (there are 14 students altogether). You can contact each other and work out how you would like to do things together. Please take the group aspect of the project seriously; try to learn from each other and work as a team.

I would like to see a short report (2-4 pages) explaining what you did with the project. The report can be any format you like, but it should address the following topics:

- Discussion of the algorithm, including the problem it solves.
- Discussion of any interesting implementation details (such as development environment used, programming tricks to speed up your computation, etc).
- Discussion of tests you did to make sure your code works properly.
- Discussion of timings on sample problems, including any challenge problems given as part of the assignment. Can you observe the claimed complexity of the algorithm?
- Any concluding comments you have.

You should submit a printout of your code with the project (this is not counted in the 2-4 pages above), along with sample runs, etc.

Revised: Wed Feb 15 14:27:16 EST 2017

Paul Gunnells

gunnells at math dot umass dot edu