Number Theory

There's a total of 14 notes.




Sun, May 21, 2017

Divisibility

Let $a,b \in \mathbb{Z}$. We say that $a$ _**divides**_ $b$, written $a \given b$, if there's an integer $n$ such that $b = na$. If $a$ divides $b$, then $b$ is _**divisible**_ by $a$, and $a$ is a _**divisor or factor**_ of $b$. Also, $b$ is called a _**multiple**_ of $a$. This article covers the greatest common divisor and how to find it using the Euclidean Algorithm, the Extended Euclidean Algorithm to find solutions to the equation $ax + by = gcd(a, b)$ where $x, y$ are unknowns.
Sun, Jun 14, 2015

Integer Factorization

Integer factorization is the process of decomposing a *composite* number into a product of smaller integers, if these integers are restricted to be prime numbers then the process is called **prime factorization**. This article covers factorization using trial division and fermat factorization through Pollard's Rho algorithm and using the sieve of eratosthenes.
Sat, Jun 13, 2015

Divisor Function

The divisor function returns the number of divisors of an integer. This article covers important relations of the divisor function and prime numbers.
Thu, Jun 11, 2015

Primality Test

A prime number is a natural number greater than $1$ which has no positive divisors other than $1$ and itself. This article covers different algorithms for checking if a number is prime or not, including a naive test, the Eratosthenes Sieve, the Euler Primality Test, and the Miller-Rabin Primality Test.
Tue, Jun 9, 2015

Prime factors of a factorial

This article describes and implements a solution for the following problem: given two numbers $n$ and $k$ find the greatest power of $k$ that divides $n!$
Tue, Jun 9, 2015

Special factorial modulo p

Let $n!_{\\%p}$ be a special factorial where $n!$ is divided by the maximum exponent of $p$ that divides $n!$. This article describes this problem and its solution, with an implementation in C++.
Mon, Jun 8, 2015

Discrete Logarithm

The discrete logarithm finds a solution for $x$ in the congruence $a^x \equiv b \pmod{n}$ where $a$, $b$, and $n$ are **integers**, $a$ and $n$ are coprime. This article covers two algorithms to solve this problem: by trial multiplication and using Baby Step Giant Step.
Fri, Jun 5, 2015

Chinese Remainder Theorem

The Chinese Remainder Theorem (CRT) is a theorem that deals with finding a solution to a system of congruences. This article covers the definition of the CRT and an example implementation in C++.
Thu, Jun 4, 2015

Modular Arithmetic

Modular arithmetic is a type of arithmetic that deals with integers and remains within a fixed range of values. It involves performing arithmetic operations such as addition, subtraction, multiplication, and division, but with the added concept of a "modulus" or a "mod" value. This article covers the definition of a congruence relation, and some of its properties like addition, multiplication, exponentiation, and inverse. Next, I show how we can use the Extended Euclidean Algorithm to find the modular multiplicative inverse in a general case and in the case of coprime numbers.
Tue, Jun 2, 2015

Extended Euclidean Algorithm

The Extended Euclidean Algorithm finds solutions to the equation $ax + by = gcd(a, b)$ where $x, y$ are unknowns. This article covers a few applications of the Extended Euclidean Algorithm like finding the modular multiplicative inverse of a number and finding solutions for linear congruence equations.
Mon, Jun 1, 2015

Binary Exponentiation

Given two numbers $a$ and $n$, finding $a^n$ involves performing $n$ multiplications of $a$. However, it's possible to do this in $log(n)$ operations using binary exponentiation.
Mon, Jun 1, 2015

Eratosthenes Sieve

The Eratosthenes Sieve is an algorithm to find prime numbers up to a positive number $n$ using $O(n)$ space.
Mon, Jun 1, 2015

Euclidean Algorithm

The Euclidean Algorithm finds the greatest common divisor of two numbers. In this article I implement the algorithm from scratch in C++.
Mon, Jun 1, 2015

Euler's phi function

*Euler's phi function* represented as $\phi(n)$ gives, for a number $n$, the number of coprimes in the range $[1..n]$; in other words, the quantity of numbers in the range $[1..n]$ whose greatest common divisor with $n$ is the unity. In this article, I try to explain how it works and implement it in C++.