# Computing for Geometry and Number Theory

A course on computing aimed at the PhD students at the
London School of Geometry and Number Theory.
The course teaches computing using advanced examples from geometry and
number theory. The aim is to teach a variety of programming styles and to show
how computing can be used as part of research.

## Optional - Preparing for the Course

We won't assume that you know how to program on the course, but we'll definitely assume you are good at maths
and a quick learner. So if you've never programmed before you might, you might want to have a go before the course
starts.

It's best to learn to program by solving problems rather than just by reading.
Ideally, you would solve a maths problem that interests you, but for ideas Project Euler
is an online resource containing maths problems that typically need a computer to solve them. If you can already program,
solve the problems in the language of your choice. If you can't program you might want to try to start teaching yourself a language. Just learn as much as you need
to solve the problems. Python is a good
choice because there are lots of online tutorials, for example this non-programmer's introduction to Python 3.

The other language we cover in the course is Mathematica. The online tutorials aren't as many and as varied as for Python, but you might try
their Fast Introduction for Math Students.

## Part 1 - Mathematica

### Lecture 1

Introduction/Motivation/Getting started with Mathematica. Slides.

### Lecture 2

Functional Programming/Cubic surfaces. Slides.

### Lecture 3

Functional Programming/Schlafli Graph. Slides. 27 Lines Notebook

### Lecture 4

Functional Programming Slides.

### Lecture 5

Data Structures/Differential Geometry/Exercises. Mathematica Notebook.

Mathematica Cheat Sheet (not by me)

## Part 2 - Python

### Lecture 6

Procedural programming in Python. Slides. Solutions.

### Lecture 7

Flow of control.Slides. Code and Solutions.

### Lecture 8 - Won't happen!

Object oriented Python. Elliptic Curve Cryptography Slides. Code and Solutions.

Python Cheat Sheet (not by me)

#### Links and Notes

Remote desktop environment nmslabrdp1.nms.kcl.ac.uk

Location of anaconda "/opt/anaconda3/bin/python"