Chapter 3 The Fundamentals : Algorithms, the Integers, and Matrices

Slides:



Advertisements
Similar presentations
Chapter 2 Combinatorial Analysis 主講人 : 虞台文. Content Basic Procedure for Probability Calculation Counting – Ordered Samples with Replacement – Ordered.
Advertisements

663 Chapter 14 Integral Transform Method Integral transform 可以表示成如下的積分式的 transform  kernel Laplace transform is one of the integral transform 本章討論的 integral.
Course 1 演算法: 效率、分析與量級 Algorithms: Efficiency, Analysis, and Order
基本概論 Basic concepts.
Introduction 基本概念 授課老師:蕭志明
TQC+ 物件導向程式認證-JAVA.
Performance Evaluation
-Artificial Neural Network- Hopfield Neural Network(HNN) 朝陽科技大學 資訊管理系 李麗華 教授.
The discipline of algorithms
XI. Hilbert Huang Transform (HHT)
Minimum Spanning Trees
3-3 Modeling with Systems of DEs
Euler’s method of construction of the Exponential function
RSA-256bit Digital Circuit Lab TA: Po-Chen Wu.
IV. Implementation IV-A Method 1: Direct Implementation 以 STFT 為例
期末考的範圍遠遠多於期中考,要了解的定理和觀念也非常多
Population proportion and sample proportion
! 温故知新 上下文无关文法 最左推导 最右推导 自上而下 自下而上 句柄 归约 移进-归约冲突 移进-归约分析 递归下降预测分析
模式识别 Pattern Recognition
计算机问题求解 – 论题 算法的效率 2018年03月14日.
Differential Equations (DE)
二、現代的加解密法:RSA 非對稱式密碼系統的一種。
Chapter 4 歸納(Induction)與遞迴(Recursion)
主讲人: 吕敏 { } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 { } Spring 2012 ,USTC.
微積分網路教學課程 應用統計學系 周 章.
計算方法設計與分析 Design and Analysis of Algorithms 唐傳義
樹狀結構 陳怡芬 2018/11/16 北一女中資訊專題研究.
非線性規劃 Nonlinear Programming
SAT and max-sat Qi-Zhi Cai.
張智星 清大資工系 補充內容:方煒 台大生機系 小幅修改:吳俊仲 長庚機械系
Course 4 搜尋 Search.
第 1 章 演算法分析.
Chapter 2 The Fundamentals : Algorithms, the Integers, and Matrices.
Properties of Continuous probability distributions
The Greedy Method.
Sampling Theory and Some Important Sampling Distributions
Chapter 6 Advanced Counting Techniques
Course 9 NP Theory序論 An Introduction to the Theory of NP
Chapter 13 數論基礎.
现代密码学理论与实践 第4章 有限域 Fourth Edition by William Stallings Slides by 杨寿保
主讲人: 吕敏 { } Spring 2016,USTC 算法基础 主讲人: 吕敏 { } Spring 2016,USTC.
本章大綱 2.1 The Limit of a Function函數的極限 2.2 Limit Laws極限的性質
Randomized Algorithms
主讲人: 吕敏 } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 } Spring 2012 ,USTC.
第四章 插值 /* Interpolation */
Interval Estimation區間估計
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Chapter 2 密碼基礎數學I:模數算數、同餘 與矩陣.
4-5 数论基础.
樹 2 Michael Tsai 2013/3/26.
Chapter 5 Recursion.
鄧姚文 資料結構 第一章:基本概念 鄧姚文
每周三交作业,作业成绩占总成绩的15%; 平时不定期的进行小测验,占总成绩的 15%;
计算机算法基础 周中成 苏州科技学院应用数学系 2019/4/18.
3.5 Region Filling Region Filling is a process of “coloring in” a definite image area or region. 2019/4/19.
第九章 數論基礎.
公钥密码学与RSA.
软件测试技术-白盒测试 张志强 2006.
Course 10 削減與搜尋 Prune and Search
演算法時間複雜度 (The Complexity of Algorithms)
演算法分析 (Analyzing Algorithms)
Chapter 7 Relations (關係)
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
赵才荣 同济大学,电子与信息工程学院,智信馆410室
北一女中 資訊選手培訓營 遞迴、河內塔與merge sort Nan.
二项式的分解因式 Factoring binomials
演講綱要 1. 簡介資料結構 2. Hashing (赫序) 模式 3. 如何存取小群的文字資料 4. 如何存取大群的文字資料
Gaussian Process Ruohua Shi Meeting
Presentation transcript:

Chapter 3 The Fundamentals : Algorithms, the Integers, and Matrices Discrete Mathematics Chapter 3 The Fundamentals : Algorithms, the Integers, and Matrices 大葉大學 資訊工程系 黃鈴玲

3.1 Algorithms (演算法) Def 1. An algorithm is a finite sequence of precise instructions for performing a computation or for solving a problem. Example 1. Describe an algorithm for finding the maximum value in a finite sequence of integers.(假設給定的整數序列是a1,a2,…,an,求最大值)

Solution : ( English language) Set the temporary maximum equal to the first integer in the sequence. Compare the next integer in the sequence to the temporary maximum, and if it is larger than the temporary maximum, set the temporary maximum equal to this integer. Repeat the previous step if there are more integers in the sequence. Stop when there are no integers left in the sequence. The temporary maximum at this point is the largest integer in the sequence.

Solution (pseudo-code虛擬碼) Algorithm 1. Finding the Maximum Element procedure max(a1, a2, …, an : integers) max := a1 for i := 2 to n if max < ai then max := ai { max is the largest element} 演算法名稱 輸入變數名稱 輸入變數型別 procedure 表示開始一個副程式 := 用來表示「指定」 max := a1表示「指定max變數的值等於a1」 大括號{}用來存放註解,此處標示「輸出變數」是max

※ There are several properties that algorithms generally share : Input Output Definiteness : The steps of an algorithm must be defined precisely. Correctness : produce correct output values Finiteness : produce the desired output after a finite number of step. Effectiveness Generality : The procedure should be applicable for all problems of the desired form, not just for a particular set of input values.

Exercise 3.1 3. 設計一個演算法,找出某個整數集合中所有數目的總和。 參考找最大值的演算法做修改: procedure max(a1, a2, …, an : integers) max := a1 for i := 2 to n if max < ai then max := ai { max is the largest element} procedure sum (a1, a2, …, an : integers) sum := for i := to { sum is the largest element}

※ Searching (搜尋) Algorithms Problem : Locate an element x in a list of distinct elements a1,a2,…,an, or determine that it is not in the list. 做法 : linear search(線性搜尋), binary search(二元搜尋) Algorithm 2. The linear search algorithm procedure linear_search( x : integer, a1,a2,…,an: distinct integers) i := 1 While ( i ≤ n and x≠ai ) i := i + 1 if i ≤ n then location := i else location := 0 { location = j if x = aj; location = 0 if x is not found.}

Exercise 3.1 13(a). 列出「線性搜尋」用來從序列 1, 3, 4, 5, 6, 8, 9, 11中尋找 9 的步驟。 參考: procedure linear_search( x : integer, a1,a2,…,an: distinct integers) i := 1 While ( i ≤ n and x≠ai ) i := i + 1 if i ≤ n then location := i else location := 0 { location = j if x = aj; location = 0 if x is not found.}

兩種search方式的概念 : Linear Search : 從 a1 開始,逐一比對 x 是否等於 ai,若找到則 location = i , 若到 an 比完後還找不到,則 location = 0。 Binary Search : (必須具備 a1 < a2 < … < an 的性質才能用) (1) 每次將 list 切成兩半: ( ai , … , am )及 (am+1 , … , aj ) 若 x > am 表示 x 應在右半,否則在左半。 (2) 重覆上一步驟至 list 只剩一個元素 ai, 若 x = ai 則 location = i,否則 location = 0。

x 正在搜尋 x 的數列為 ai, ai+1, …, aj 一開始 i=1, j=16 Example 3. Search 19 from a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 1 2 3 5 6 7 8 10 12 13 15 16 18 19 20 22 12 13 15 16 18 19 20 22 18 19 20 22 18 19 19 一開始 i=1, j=16 1. 切兩半, m=8 因 x=19 > a8=10,取右半,i=9 2. 再切二半, m=12 因 x=19 > a12=16,取右半, i=13 3. 再切二半, m=14 因 x=19  a14=19,取左半, j=14 4. 再切二半, m=13 因 x=19 > a13=18,取右半, i=14 5 此時 i = j =14, 數列只剩一個元素 a14 = 19 因 x= 19 = a14,故 location =14 Note : ai, ai+1, …, aj 數列的切法 : 令 m = 則 am 即切開紅線左邊那點。

Algorithm 3. The Binary Search Algorithm procedure binary_search( x : integer, a1,a2,…,an : increasing integers) i :=1 { i is left endpoint of search interval } j := n { j is right endpoint of search interval } while i < j begin m := if x > am then i := m+1 else j := m end if x = ai then location := i else location := 0 { location = i if x = ai , location = 0 if x≠ai , ∀i }

Exercise 3.1 13(b). 列出「二元搜尋」用來從序列 1, 3, 4, 5, 6, 8, 9, 11中尋找 9 的步驟。 參考: procedure binary_search( x : integer, a1,a2,…,an : increasing integers) i :=1 { i is left endpoint of search interval } j := n { j is right endpoint of search interval } while i < j begin m := if x > am then i := m+1 else j := m end if x = ai then location := i else location := 0 { location = i if x = ai ; location = 0 if x≠ai, ∀i }

13(補充). 列出「二元搜尋」用來從序列 2, 4, 6, 8, 10, 12, 14 中尋找 3 的步驟。 13(補充). 列出「二元搜尋」用來從序列 2, 4, 6, 8, 10, 12, 14 中尋找 3 的步驟。 參考: procedure binary_search( x : integer, a1,a2,…,an : increasing integers) i :=1 { i is left endpoint of search interval } j := n { j is right endpoint of search interval } while i < j begin m := if x > am then i := m+1 else j := m end if x = ai then location := i else location := 0 { location = i if x = ai ; location = 0 if x≠ai, ∀i }

(跳過) ※ Sorting Algorithms Problem : Suppose that we have a list of elements, a sorting is putting these elements into a list in which the elements are in increasing order. eg. 7, 2, 1, 4, 5, 9 => 1, 2, 4, 5, 7, 9 d, t, c, a, f => a, c, d, f, t 解法有很多,此處僅介紹 : bubble sort (氣泡排序法),及 insertion sort (插入排序法)。 Bubble Sort 概念 : 設原 list 為 a1,…,an。 從a1,a2開始,向後兩兩比較,若ai > ai+1 則交換,當檢查完 an 時,an 必定是最大數。 再從 a1,a2 開始向後比較,若ai > ai+1 則交換,此時只需檢查到 an-1 即可。 依此類推。

(跳過) Example 4. Use the bubble sort to put 3, 2, 4, 1, 5 into increasing order. Sol : First pass (i=1) : Second pass (i=2) : 3 2 4 1 5 2 3 4 1 5 2 3 4 1 5 2 3 1 4 5 2 3 1 4 5 2 3 1 4 5 2 3 1 4 5 2 1 3 4 5 2 1 3 4 5 Third pass (i=3) : Fourth pass (i=4) : 2 1 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

Algorithm 4 The Bubble Sort procedure bubble_sort (a1,…,an ) (跳過) Algorithm 4 The Bubble Sort procedure bubble_sort (a1,…,an ) for i := 1 to n-1 for j := 1 to n-i if aj > aj+1 then interchange aj and aj+1 { a1,a2,…,an is in increasing order }

(跳過) Insertion Sort 的概念 : 從 j = 2 開始,將 aj 插入已排序好的 a1,…,aj-1間的位置,使得 a1,…,aj 都由小 → 大排好。 j 逐次遞增,重複上一步驟至做完。

Example 5. Use insertion sort to sort 3, 2, 4, 1, 5 Sol : (跳過) a1 a2 a3 a4 a5 Example 5. Use insertion sort to sort 3, 2, 4, 1, 5 Sol : (j=2時,a1=3可看成已經排序好的數列,此時要插入a2) : 3 < 2  2, 3 交換  2, 3, 4, 1, 5 (j=3時,a1,a2已經排序好,此時要插入a3) : 4 > 2, 4 > 3  4的位置不變  2, 3, 4, 1, 5 (j=4時,a1,a2 ,a3已經排序好,此時要插入a4) : 1 < 2  將 1 插在最前面  1, 2, 3, 4, 5 (j=5時,a1,a2 ,a3 ,a4已經排序好,此時要插入a5) : 5 > 1, 5 > 2, 5 > 3, 5 > 4  5不變  1, 2, 3, 4, 5

(跳過) Algorithm 5 The Insertion Sort procedure insertion_sort ( a1,…,an : real numbers with n ≥ 2 ) for j := 2 to n begin i := 1 while aj > ai i := i + 1 m := aj for k := 0 to j – i – 1 aj-k := aj-k-1 ai := m end { a1,a2,…,an are sorted } 找出 aj 應插入的位置 最後ai-1 < aj <= ai 將 ai, ai+1, …, aj-1 全部往右移一格 ( Exercise : 13, 23, 35, 39 )

3.2 The Growth of Functions (函數的成長) 為了分析演算法的實用性,我們需要瞭解 函數 (用來代表一個演算法中的運算次數) 隨著n (input變數的個數) 的成長,會增加多快. 例. 排序 n 物件 假設Algorithm 1 需要 n2次計算 Algorithm 2 需要 8n次計算,哪一個演算法比較好? n 1 2 3 … 8 9 10 計算次數 Alg.1 Alg.2 1 4 9 … 64 81 100 8 16 24 … 64 72 80 better!

Def 1. ( Big-O notation ) Let f and g be functions from the set of integers 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 . ( read as “f (x) is big-oh of g(x)” ) 我們說函數 f (x) 是 O(g(x)) 代表 在 x 夠大時,| f (x)| ≤ |g(x)| 的某個常數倍數

Example 1. Show that f (x) = x2+2x+1 is O(x2) Sol : Since 通常都是把最高次項搬進來 Example 1. Show that f (x) = x2+2x+1 is O(x2) Sol : Since x2+2x+1 ≤ x2+2x2+x2 = 4x2 whenever x > 1 , it follows that f (x) is O(x2) (take C = 4 and k =1 ) 另法: If x > 2, we see that x2+2x+1 ≤ x2+x2+x2 = 3x2 ( take C = 3 and k = 2 )

Figure 2. The function f (x) is O(g(x)) Example 1(補充). Show that f (x)= x2 +2x +2 is O(x3) Sol : Since x2+2x+2 ≤ x3+x3+x3 = 3x3 whenever x > 1, we see that f (x) is O(x3) ( take C = 3 and k = 1 ) k Cg(x) f (x) g(x) f (x) < C g(x) for x > k Note. The function g is chosen to be as small as possible. 大O符號裡放的函數 要越小越好

Theorem 1. Let f (x) = anxn+an-1xn-1+…+a1x+a0 (跳過) Theorem 1. Let f (x) = anxn+an-1xn-1+…+a1x+a0 where a0, a1, …, an are real numbers. Then f (x) is O(xn). Example 5. How can big-O notation be used to estimate the sum of the first n positive integers? ( i.e.,  ) Sol : 1 + 2 + 3 + … + n ≤ n + n + … + n = n2 ∴ is O(n2), taking C =1 and k =1.

Example 6. Give big-O estimates for f (n) = n! Sol : (跳過) Example 6. Give big-O estimates for f (n) = n! Sol : n! = 12  3  …  n ≤ n  n  …  n = nn ∴ n! is O(nn) , taking C =1 and k =1. Example 7. (see Figure 3) 常見function的成長速度由小至大排列: 1 < log n < n < n log n < n2 < 2n < n! Theorem 2,3 Suppose that f1(x) is O(g1(x)) and f2(x) is O(g2(x)), then (f1+f2)(x) is O(max(|g1(x)|, |g2(x)|)), (f1 f2)(x) is O(g1(x) g2(x)).

Exercise 19(c) : f (n) = (n!+2n)(n3+log(n2+1))  (n!+n!)(n3+n3) (跳過) Exercise 7,11,19 Exercise 19(c) : f (n) = (n!+2n)(n3+log(n2+1))  (n!+n!)(n3+n3) = 4n3n! ∴ f (n) is O(n3n!) 取 C = 4, k = 3

3.3 Complexity of Algorithms (複雜度) Q : 如何分析演算法的執行效能? Ans : (1) time (2) memory Def : Time complexity: an analysis of the time required to solve a problem of a particular size. (評量方式 : 計算「運算次數」,如 “做比較”的次數, “加法” 或 “乘法”次數等) Space complexity: 分析解問題時所需的電腦記憶體容量 (通常是資料結構探討的範圍)

Example 1. 描述 Algorithm 1 (Find Max) 的時間複雜度. Sol : (計算 「做比較」的次數) i 值一開始 = 2 逐次加一,並比較是否>n. 當 i 變成 n+1 時 因比 n 大,故結束 for 迴圈。 ∴ 共有 n 次比較 共有 n-1 次比較 故整個演算法共做 2n-1 次比較 其時間複雜度 為 O(n). Algorithm 1. ( Find Max ) procedure max(a1,…,an : integers) max := a1 for i := 2 to n if max < ai then max := ai { max is the largest element }

Example 2. Describe the time complexity of the linear search algorithm. Algorithm 2 ( Linear Search ) procedure ls ( x : integer , a1,…,an : distinct integers ) i := 1 While ( i  n and x ≠ai ) i := i +1 if i  n then location := i else location := 0 { location = i if x = ai; location = 0 if x  ai i} Sol : ( 計算「比較」次數) (Case 1) 當 x = 某個 ai 時 此行只執行 i 次,故此行共2i次比較 加上if,共計 2i +1次比較. (Case 2) 當 x ≠ 任何 ai 時 此行執行 n 次後 第 n + 1 次時 i = n + 1 > n 即跳出 ∴共計 2n+2 次比較 由(1)、(2)取 worst-case (最糟的情形) 故演算法的 time complexity為 O(n)

Exercise 3.3 7. 對多項式 an xn + an-1xn-1 +… + a1x +a0, 求出 x = c 時的值,傳統演算法做法如下: procedure polynomial (c, a0, a1,…,an : real numbers) power := 1 {變數power用來表示乘冪} y := a0 {變數y用來表示目前已算出的多項式值} for i := 1 to n begin power := power * c y := y + ai * power end{ y = anc n + an-1c n-1 +… + a1c +a0} 執行上述演算法的每一步驟,計算 3x2 + x +1 在 x =2 時的值 為求出n階多項式在x = c時的值,所需乘法與加法次數為何?

Exercise 3.3 8. 對多項式 an xn + an-1xn-1 +… + a1x +a0, 求出 x = c 時的值,更有效率的Horner演算法做法如下: procedure Horner (c, a0, a1,…,an : real numbers) y := an for i := 1 to n y := y * c + an-i { y = anc n + an-1c n-1 +… + a1c +a0} 執行上述演算法的每一步驟,計算 3x2 + x +1 在 x =2 時的值 為求出n階多項式在x = c時的值,所需乘法與加法次數為何?

∴average-case的time complexity為O(n) (跳過) Example 4. Describe the average-case performance of the linear search algorithm, assuming that x is in the list. Sol : ( 計算 “平均比較次數” ) 已知當 x = ai 時,共需 2i + 1 次比較. ( by Example 2 ) x = a1,a2, …, 或 an 的機率都是 1/n. ∴平均比較次數 (即期望值) = ( x = a1 的比較次數 ) × ( x = a1 的機率 ) + ( x = a2 的比較次數 ) × ( x = a2 的機率 ) + … + ( x = an 的比較次數 ) × ( x = an 的機率 ) = 3 × 1/n + 5 × 1/n + … + ( 2n+1) × 1/n = ( 3+5+…+(2n+1)) / n = / n = n + 2 Alg. 2 ( Linear Search ) procedure ls ( x,a1,…,an) i := 1 While ( i  n and x ≠ai ) i := i +1 if i  n then location := i else location := 0 Exercise : 13 ∴average-case的time complexity為O(n)

Example 3. Describe the time complexity of the binary search algorithm. Alg. 3 ( Binary Search ) procedure bs ( x : integer, a1,…,an : increasing integers ) i := 1 { left endpoint } j := n { right endpoint } while i < j /* ( k+1 次) begin m :=  ( i + j ) / 2  if x > am then i := m+1 /* ( k次 ) else j := m end if x = ai then location := i /* ( 1次 ) else location := 0 Sol : 設 n = 2k 以簡化計算 (若 n < 2k,其比較次數必小於等 於 n = 2k 的情況) 因while迴圈每次執行後 整個 list 會切成兩半 故最多只能切 k 次 就會因 i = j 而跳出迴圈 ∴共比較 2k+2 次 time complexity 為 O(k) = O(log n)

(跳過) Example 5. What is the worst-case complexity of the bubble sort in terms of the number of comparisons made ? Sol : 共 n-1 個 pass 第 i 個 pass 需 n – i 次比較 ∴共計 (n-1)+(n-2)+…+1 = 次比較 ∴ O(n2) procedure bubble_sort ( a1,…,an ) for i := 1 to n -1 for j := 1 to n – i if aj > aj+1 then interchange aj and ai+1 { a1,…,an is in increasing order } Note 1. 不管何種 case 都需做 次比較。 Note 2. For 迴圈所需比較次數通常會省略,因此Example 5,6 不再考慮。

(跳過) Example 6. What is the worst-case complexity of the insertion sort in terms of the number of comparisons made ? procedure insertion_sort ( a1,…,an ) for j := 2 to n begin i := 1 while aj > ai i := i +1 m := aj for k := 0 to j - i -1 aj-k := aj-k-1 ai := m end { a1,…,an are sorted } Sol : 做最多次比較的情況如下: 在考慮 aj 時 a1 < a2 < … < aj-1 < aj 此時共做 j 次比較 故共計 2+3+…+n = -1 次比較  O(n2) (即 worst case 是 a1 < a2 < … < an)

Table 1. Commonly Used Terminology Complexity Terminology O(1) constant complexity O(log n) Logarithmic complexity O(n) Linear complexity O(n log n) n log n complexity O(nb) Polynomial complexity O(bn) , b >1 Exponential complexity O(n!) Factorial complexity

3.4 The integers and division (除法) ※探討一些 Number Theory 的基本觀念 Def 1. a,b : integers, a≠0. a divides b (denote a | b) if cZ, b=ac. a : a factor (因數) of b, b : a multiple (倍數) of a (a b if a does not divide b) Theorem 1. a,b,c  Z, (i) If a | b and a | c then a | (b+c). (ii) If a | b then a | bc for any integer c. (iii) If a | b and b | c then a | c. Corollary 1. If a,b,c  Z and a | b , a | c. then a | (mb+nc) whenever m,n Z.

Def 2. In the equality a = dq + r with 0  r < d, d is called the divisor (除數), a is called the dividend (被除數), q is called the quotient (商數), and r is called the remainder (餘數).  q = a div d, r = a mod d Example 3. 101 div 11= ? (商數) 101 mod 11 =? (餘數) Sol: 101 = 11  9 + 2 故 101 div 11 = 9, 101 mod 11 = 2 Example 4. -11 div 3= ? (商數) -11 mod 3 =? (餘數) Sol: -11 = 3  (-4) + 1 故 -11 div 3 = -4, -11 mod 3 = 1

Exercise 3.4 10. (b) 777 div 21 = 777 mod 21 = (c) -123 div 19 = -123 mod 19

※ 模算術 Def 3. If a,bZ, mZ+, then a is congruent (同餘) to b modulo m if m | (a-b). (表示為 a  b (mod m), 即整數a、b 對模m同餘). Thm 3. Let mZ+, a,bZ. a ≡ b (mod m) iff  a mod m = b mod m. Example 5. 判斷在模6時,17是否同餘於5? 24是否同餘於14? Sol: 17 mod 6 = 5, 5 mod 6 = 5, 故17同餘於5 24 mod 6 = 0, 14 mod 6 = 2, 故24不同餘於14

a ≡ b (mod m) iff kZ, 使得 a = b + km. Thm 4. Let mZ+, a,bZ. a ≡ b (mod m) iff kZ, 使得 a = b + km. Thm 5. Let mZ+, a,bZ. If a ≡ b (mod m) and c ≡ d (mod m), then a+c ≡ b+d (mod m) and ac ≡ bd (mod m). Example 6. 7 ≡ 2 (mod 5), 11 ≡ 1 (mod 5), 故 18 ≡ 3 (mod 5), 77 ≡ 2 (mod 5).

Exercise 3.4 19. 判斷下列何者在模數 17 時,與 5 同餘。 (a) 80 (b) 103 (c) -29 (d) -122 補充: 請計算 (1717 9 + 31) mod 5 =?

※同餘的應用-密碼學 凱撒大帝的加密法: 將訊息中每個字母向後移動三位,最後三個字母則以最前面三個字母取代,如 B 換成 E,X 換成 A。 以數學方式表示: 將A~Z以0~25編碼,將編號 p 的字母以 f(p) 取代, 其中 f(p) = (p+3) mod 26。 Example 9. 根據凱撒大帝的密碼製作方式,下面的訊息會被加密成什麼? “MEET YOU IN THE PARK” Sol. “PHHW BRX LQ WKH SDUN”

改進加密法: 將A~Z以0~25編碼,將編號 p 的字母以 f(p) 取代, 其中 f(p) = (ap + b) mod 26, 所選取的整數 a, b 只要能使 f(p) 成為對射函數即可。 Example 10. 若使用 f(p) = (7p + 3) mod 26來加密,則將會用哪一個字母來取代 K? Sol. K 的編碼是 10, (710+3) mod 26 = 21 故用V取代K A B C D E F G H I J K L M 1 2 3 4 5 6 7 8 9 10 11 12 N O P Q R S T U V W X Y Z 13 14 15 16 17 18 19 20 21 22 23 24 25

Exercise 3.4 31. 利用給定的函數 f(p) = (7p + 3) mod 26,將訊息 “PASS THROUGH” 加密,寫出加密的訊息。 32. 將下列經凱撒密碼加密之訊息解密: “EOXH MHDQV” A B C D E F G H I J K L M 1 2 3 4 5 6 7 8 9 10 11 12 N O P Q R S T U V W X Y Z 13 14 15 16 17 18 19 20 21 22 23 24 25

3.5 Primes and Greatest Common Divisors Def 1. pZ+-{1} is called prime (質數) if a p, 1<a< p, aZ+. p is called composite (合成數) otherwise. Thm 1. (算數基本定理) 每個大於1的正整數,都能唯一表示為 一個質數 或是 兩個以上質數的乘積(數字由小排到大)。 Example 2. (prime factorization) 100 的質因數分解是 2255 = 2252. 641 的質因數分解是 641. 999 的質因數分解是 33337 = 3337. 1024 的質因數分解是 210.

Thm 2. 若 n 為合成數,則 n 有一個質因數  . Thm 3. 質數有無限多個。 Pf. 假設質數只有n個:p1, p2, …, 及 pn, 令Q = p1p2…pn+1, 因 p1, …, pn 都不整除Q,得證。 ※目前為止所知最大的質數是2p -1的形式, where p is prime. 稱為 Mersenne primes (梅森質數). Example 5. 22-1=3, 23-1=7, 25-1=31 are primes, but 211-1=2047=2389 is not a prime. Def 2. gcd (greatest common divisor, 最大公因數) Example 10. gcd(24, 36) = ? Example 11. gcd(17, 22) = ?

Def 3. relatively prime (互質) Def 5. lcm (least common multiple, 最小公倍數)

Exercise 3.5 5. 寫出10!的質因數分解。 6. 數字100!後面有幾個0? 6. 數字100!後面有幾個0? Sol : 計算12  3  …  100=10k m, where 10 m ∵ 10=2  5,又2的次數必定比5多 ∴ 計算1  2  3  …  100=5k  n, where 5 n ∵ 5,10,15,20,…,100 才有因數5, 而 25,50,75,100 有因數25 ∴ k=24  共有24個0

3.6 Integers and Algorithms ※The Euclidean Algorithm (輾轉相除法求 gcd ) Example : Find gcd(91,287). Sol: (相除找餘數) 287 = 91 3 + 14 (重複) 91 = 14  6 + 7 14 = 7  2 ∴ gcd(91,287) = 7 (原因,若x為最大公因數) x|91 & x|287  x|14 ∴gcd (91,287) = gcd(91,14) gcd (91,14) = gcd (14,7) gcd (14,7) = 7 Lemma 1 Let a = bq + r, where a, b, q, and r Z. Then gcd(a, b) = gcd (b, r).

Example : Find gcd(91,287). Sol: (相除找餘數) 287 = 91 3 + 14 91 = 14  6 + 7 14 = 7  2 ∴ gcd(91,287) = 7 (國中時教的做法:) 287 91 6 3 84 273 7 14 2 14

Algorithm 6. ( The Euclidean Algorithm) 歐基里得演算法 Algorithm 6. ( The Euclidean Algorithm) procedure gcd ( a, b : positive integers) x := a y := b while y≠0 begin r := x mod y ( if y > x then r = x) x := y y := r end { gcd (a, b) = x } eg. 求 gcd (6,12) x = 6 y = 12 while y≠0 r = 6 mod 12 =6 x = 12 y = 6 while y≠0 r = 12 mod 6 = 0 y = 0 while y = 0 , end. ∴ gcd (6,12) = 6 Exercise : 23,25

Exercise 3.6 23(c). 利用歐基里得演算法求出 gcd(1001, 1331)

3.7 Applications of Number Theory (跳過) 3.7 Applications of Number Theory ※介紹中國餘數定理 Example 5. 孫子算經 :「某物不知其數,三三數之餘二,五五數之餘三,七七數之餘二,問物幾何 ?」 i.e. x ≡ 2 (mod 3) x ≡ 3 (mod 5) x = ? x ≡ 2 (mod 7) Theorem 4. (The Chinese Remainder Theorem) Let m1,m2,…,mn be pairwise relatively prime positive integers. The system x ≡ a1 (mod m1) x ≡ a2 (mod m2) : x ≡ an (mod mn) has a unique solution modulo m = m1m2…mn. (即有一解 x, where 0 x < m , 且所有其他解 mod m都等於 x)

∵ m1, m2,…, mn are pairwise relatively prime ∴ gcd (Mk , mk) = 1 (跳過) Proof of Thm 4: Let Mk = m / mk  1 k  n ∵ m1, m2,…, mn are pairwise relatively prime ∴ gcd (Mk , mk) = 1  integer yk s.t. Mk yk≡1 (mod mk) ( by Thm. 3, 此處不証)  ak Mk yk≡ak (mod mk) ,  1  k  n Let x = a1M1y1+a2M2y2+…+anMnyn ∵ mi | Mj , i≠j ∴ x≡ak Mk yk≡ak (mod mk)  1 k  n x 即為一解

Example 6. (承 Example 5 題目敘述,求解) Let m = 357 = 105 M1 = m / 3 = 35 (跳過) Example 6. (承 Example 5 題目敘述,求解) Let m = 357 = 105 M1 = m / 3 = 35 M2 = m / 5 = 21 M3 = m / 7 = 15 ∵ 35≡2 (mod 3)  35  2 ≡ 1 (mod 3) 21≡1 (mod 5)  21  1 ≡ 1 (mod 5) 15≡1 (mod 7)  15  1 ≡ 1 (mod 7) ∴ x = a1M1y1 + a2M2y2 + a3M3y3 = 2  35  2 + 3  21  1 + 2  15  1 = 233 ≡ 23 (mod 105) ∴ 最小的解為23,其餘解都等於 23+105t for some tZ+ Exercise : 19 M1 y1 M2 y2 M3 y3

(跳過) Exercise 18. Find all solutions to the system of congruences x≡2 (mod 3) x≡1 (mod 4) x≡3 (mod 5) Sol : a1=2 , a2=1 , a3=3, m1=3 , m2=4 , m3=5 m=345=60 M1=20 , M2=15 , M3=12 20≡2 (mod 3)  202≡1 (mod 3) 15≡3 (mod 4)  153≡1 (mod 4) 12≡2 (mod 5)  123≡1 (mod 5) ∴ x = 2202+1153+3123 = 80+45+108=233≡53 (mod 60)

3.8 Matrices Algorithm 1. Matrix multiplication procedure matrix_multiplication(A : mk matrix, B : kn matrix ) for i := 1 to m for j :=1 to n begin cij := 0 for q := 1 to k cij := cij + aiqbqj end { c =[cij] = AB } Exercise : 試寫一algorithm求At.

Exercise 3.8 設 A= , B= , 列出 Algorithm 1執行AB的步驟。     procedure matrix_multip(A : mk matrix, B : kn matrix ) for i := 1 to m for j :=1 to n begin cij := 0 for q := 1 to k cij := cij + aiqbqj end { c =[cij] = AB }