Download presentation
Presentation is loading. Please wait.
1
質數 (Prime) 相關問題 Introducer: Hsing-Yen Ann Date: 2009/05/13
2
2 判斷是否為質數 — 暴力法 Time complexity: O(n) 建立 [1,n] 之間的質數表 : O(n 2 ) // Time: O(n) public static boolean isPrime(int n) { for (int i = 2; i < n; i++) { if (n % i == 0) { return false; } return true; }
3
3 判斷是否為質數 — 改良暴力法 Time complexity: O(n 0.5 ) 建立 [1,n] 之間的質數表 : O(n 1.5 ) // Time: O(n^0.5) public static boolean isPrime(int n) { int sqrtN = (int)Math.sqrt(n); for (int i = 2; i <= sqrtN; i++) { if (n % i == 0) { return false; } return true; }
4
4 建立質數表 Sieve of Eratosthenes ( 譯:篩法 ) http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
5
5 時間與空間分析 Time complexity: O((n log n)(loglog n)) Space complexity: O(n) n=10 7 時,計算量不超過 4×10 7 [1, 10 7 ] 之間的質數共有 664,579 個
6
6 進階應用 1 – 質因數分解 原本的實作法為: bool primeTable[n] 裡面記錄 true 或 false 改為記錄最小的 ( 或最大的 ) 質因數 int minPrimeFact[n]
7
7 進階應用 2 – 指數的數量計算 另外加上一個 array 記錄指數的數量 使用 DP 方式,可在 O(n) 時間計算完成
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.