使用C++編寫,找出子數組中的質數數
Sep 01, 2023 am 08:37 AM在本文中,我們將描述尋找子陣列中質數數量的方法。我們有一個正數數組 arr[] 和 q 個查詢,其中有兩個整數表示我們的範圍 {l, R},我們需要找到給定範圍內的質數數量。以下是給定問題的範例-
1 2 3 4 5 6 7 8 9 10 11 |
|
尋找解決方案的方法
在這種情況下,我想到了兩種方法-
暴力破解
在這種方法中,我們可以採用範圍並找出該範圍內存在的質數數量。
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
輸出
1 |
|
但是,這種方法並不是很好,因為這種方法的整體複雜度是O(Q*N* √N),這不是很好。
高效方法
在這種方法中,我們將使用埃拉托斯特尼篩選法建立一個布林數組,告訴我們該元素是否是素數,然後遍歷給定的範圍並找出該數組中素數的總數。布爾數組。
範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
輸出
1 |
|
上述程式碼的解釋
這種方法比我們之前應用的蠻力方法要快得多,因為現在的時間複雜度是O(Q*N),也就是比以前的複雜度好得多。
在這種方法中,我們預先計算元素並將它們標記為素數或非素數;因此,這降低了我們的複雜性。除此之外,我們也使用埃拉托斯特尼篩法,這將有助於我們更快找到質數。在此方法中,我們透過使用素數因子標記數字,以 O(N*log(log(N))) 複雜度將所有數字標記為質數或非質數。
結論
在本文中,我們解決了使用埃拉托斯特尼篩選法在 O(Q*N) 中尋找子數組中素數數量的問題。我們也學習了解決這個問題的C 程序以及解決這個問題的完整方法(正常且有效率)。我們可以用其他語言寫相同的程序,例如C、java、python等語言。
以上是使用C++編寫,找出子數組中的質數數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)