1. An algorithm is a finite set of precise instructions for performing a computation or for solving a problem.
Algorithm that make what seems to be the "best" choice at each step are called greedy algorithms.
2. Let f and g be functions from the set of integers or the set of real numbers to the set of real numbers, we say that f(x) is O(g(x)) if there are constants c and k such that |f(x)| <= c|g(x)| whenever x > k.
The constants c and k in the definition of big-O notation are called witnesses to the relationship f(x) is O(g(x)).
3. 1, logn, n, nlogn, n^2, 2^n, n!
4. Finding a prime
If n is a composite integer, then n has a prime divisor less than or equal to √n.
5. THE FUNDAMENTAL THEOREM OF ARITHMETIC
Every positive integer greater than 1 can be written uniquely as a prime or as the product of two or more primes. where the prime factors are wirtten int order of nondecreasing size.
e.g.
100 = 2 * 2 * 5 * 5
641 = 641
999 = 3 * 3 * 3 * 37
1024 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
With nondecreasing size, we can find next prime factor by increasing the last exist prime.
6. How many primes are less than a positive number x?
THE PRIME NUMBER THEOREM
The ratio of the number of primes not exceeding x and x/lnx approaches 1 as x grows without bound.
The Prime Number Theorem tells us that the number of primes not exceeding x can be approxinated by x/lnx.
7. ALGORITHM 1: Construction Base b Expansions
Procedure base b expansion(n: positive integer)
q := n
k := 0
while q != 0
begin
ak := q mod b
q := floor(q / b)
k := k + 1
end { the base b expansion of n is (ak-1...a1a0)b }
8. ALGORITHM 2: Addition of Integers
Procedure add (a, b: positive integers)
{the binary expansions of a and b are (an-1an-2...a1a0)2 and (bn-1bn-2...b1b0)2, respectively}
c := 0
for j := 0 to n - 1
begin
d := floor((aj + bj + c) / 2)
sj := aj + bj + c - 2d
c := d
end
sn := c
{ the binary expansion of the sum is (snsn-1...s0)2 }
e.g.
a0 + b0 = c0 * 2 + s0
a1 + b1 + c0 = c1 * 2 + s1
...
an-1 + bn-1 + cn-2 = cn-1 * 2 + sn-1
sn = cn-1
9. ALGORITHM 3: Multiplying Integers
Procedure multiply (a, b: positive integers)
{ the binary expansions of a and b are an-1an-2...a1a0)2 and (bn-1bn-2...b1b0)2, respectively}
for j := 0 to n - 1
begin
if bj = 1 then cj := a shifted j places
else cj := 0
end
{ c0, c1, ..., cn-1 are the partial products }
p := 0
for j := 0 to n - 1
p := p + cj
{ p is the value of ab }
e.g.
ab = a(b02^0 + b12^1 + ... + bn-12^n-1)
= a(b02^0) + a(b2^1) + ... + a(bn-12^n-1)
10. ALGORITHM 4: Computing div and mod procedure division algorithm
(a: integer, d: positive integer)
q := 0
r := |a|
while r >= d
begin
r := r - d
q := q + 1
end
if a < 0 and r > 0 then
begin
r := d - r
q := -(q+1)
end
{ q = a divd is the quotient, r = a and d is the remainder }
11. ALGORITHM 5: Modular Exponentiation
(find b^n mod m)
Procedure modular exponentiation
(b : integer, n = (ak-1ak-2...a1a0)2, m : positive intergers)
x := 1
power := b mod m
for i := 0 to k - 1
begin
if ai = 1 then x := (x * power) mod m
power := (power * power) mod m
end
{ x equals b^n mod m }
it uses O((logm)^2logn) bit operations.
12. Let a = bq + r. where a, b, q, and r are integers. The gcd(a, b) = gcd(b, r)
ALGORITHM 6: The Euclidean Algorithm procedure gcd(a, b : positive integers)
x := a
y := b
while y != 0
begin
r := x mod y
x := y
y := r
end { gcd(a, b) is x }
O(logb)
13. linear combination
gcd(a, b) can be form sa + tb, where s and t are integers.