1 / 16

Math

Math. b y music960633. 課程內容. 0. 幾件重要的事情 1. 最大公因數 2 . 質數 3 . 因數分解 4. 排容 原理 5. Homework. 幾件重要的事情. 1. int 的範圍 - 2 31 ~ 2 31 -1 -2147483648 ~ 2147483647 ( 最好背一下 ) 2. long long 的範圍 - 2 63 ~ 2 63 -1 - 9223372036854775808 ~ 9223372036854775807 約 -10 19 ~ 10 19

zamora
Download Presentation

Math

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Math by music960633

  2. 課程內容 • 0. 幾件重要的事情 • 1. 最大公因數 • 2. 質數 • 3. 因數分解 • 4. 排容原理 • 5. Homework

  3. 幾件重要的事情 • 1.int的範圍 • -231 ~ 231-1 • -2147483648 ~ 2147483647 (最好背一下) • 2.long long的範圍 • -263 ~ 263-1 • -9223372036854775808~9223372036854775807 • 約 -1019 ~ 1019 • 3. 解題時一定要注意範圍!

  4. 最大公因數(GCD) • 前情提要:a%b表示a除以b的餘數 • ex:5%3=2 , 8%5=3 • 輾轉相除法 • gcd(a,b)=gcd(b,a%b) • 一些GCD的性質 • gcd(a,b,c)=gcd(gcd(a,b),c) • gcd(ka,kb)=k*gcd(a,b) • 最小公倍數(LCM)=a*b/gcd(a,b)

  5. 最大公因數(GCD) • 實做 • 1. 遞迴 gcd(a,b) = gcd(b,a%b) • 2. 迴圈 while(a!=0 && b!=0) ...

  6. 質數 • 前情提要 • 質數定義:大於1,且因數只有1和本身的數 • 質數有無窮多個 • 合數:不是質數的數 • 1不是質數 • [冷知識]2147483647是質數 • 本節內容 • 判斷質數 • 建質數表

  7. 判斷質數 • 如何判斷一個數是否為質數? • 1. 從2到n-1全部掃過 • 太慢了 • 2. 只要判斷到就可以了 • why?

  8. 建質數表 • 1. 對於每個數都判斷是不是質數 • 2. 利用已知的質數進行加速 • 3. 篩法

  9. 建質數表 • 質數篩法 • 想法:先把所有的整數列出來,然後從小到大找出還沒被砍掉的數,每找到一個數就把這個數的倍數全部砍掉 • ex: 2 3 4 5 6 7 8 9 101112 23 57911 235711 235711 235711 235711

  10. 建質數表 • 速度比較 • 把MAX_N設成10000000 • 為了秉持實驗精神,結果為分別測5次後取平均的值 • buildPrime_v1 : 8423 ms (對每個數判斷是否為質數) • buildPrime_v2 : 1538 ms(利用已知的質數做判斷) • buildPrime_v3 : 167 ms(篩法) • buildPrime_v4 : 5 ms(篩法優化)

  11. 判斷質數 • 如何判斷多個數是否為質數? • 1.每個數都用判斷 • 優點:不使用多餘空間,也沒有預處理的時間 • 缺點:判斷較慢 • 2. 使用篩法,記錄每個數是不是質數 (預處理) • 優點:判斷超快 • 缺點:n到多大,表就要建多大 • 3. 找出1~的所有質數,每個都對n判斷一次 (預處理) • 以上兩者的折衷 • a007

  12. 因數分解 • 算數基本定理:每個大於1的正整數有唯一的質因數分解 • ex: 12=22 x 3 • 如何對一個數因數分解? • 從2開始找,如果可以整除n就一直除,並記錄除了幾次 • 如何對很多數因式分解? • 1. 做法同上 (慢) • 2. 建質數表,之後只判質數就可以了

  13. 因數個數 • 請問一個數n的因數個數 • 1. 從1到n掃過一遍 • 2. 只要掃到就可以了 • 3. 因數分解 • 那麼多個數的因數個數呢?

  14. 排容原理 • |A ∪ B| = |A| + |B| - |A ∩ B| • 翻譯:(A聯集B)的元素個數 =A的元素個數 +B的元素個 數 –(A交集B)的元素個數 • ex: A={1,2,3} |A|=3 B ={2,3,4} |B|=3 A ∪ B={1,2,3,4} |A ∪ B|=4 A ∩ B={2,3} |A ∩ B|=2 4 = 3 + 3 – 2

  15. 排容原理 • 應用 • 請問1~100中是4的倍數或6的倍數的數有幾個? • 設A為1~100所有4的倍數的集合,B為1~100所有6的倍數的集合,則所求即是|A∪ B| • 由排容原理,|A ∪ B|=|A|+|B|-|A ∩ B| • |A|=[100/4]=25, |B|=[100/6]=16 ([]為高斯符號 ) • A ∩ B:1~100所有是4的倍數也是6的倍數的集合,也就是1~100所有12的倍數的集合,|A ∩ B|=[100/12]=8 • |A ∪ B|=|A|+|B|-|A ∩ B|=25+16-8=33

  16. Homework • 手寫: • Math • 程式: • 1.gcd • 2. 判斷質數一 • 3. 判斷質數二(a007) • 4. 因數個數一 • 5. 因數個數二 • 6. 區間內倍數個數 • 7.Ad-hoc

More Related