【模板小程序】求M~N范圍內的質數個數


 1 /*
 2 本程序說明:
 3 
 4 [編程題] 求素數
 5 時間限制:2秒
 6 空間限制:32768K
 7 輸入M、N,1 < M < N < 1000000,求區間[M,N]內的所有素數的個數。素數定義:除了1以外,只能被1和自己整除的自然數稱為素數
 8 輸入描述:
 9 兩個整數M,N
10 
11 
12 輸出描述:
13 區間內素數的個數
14 
15 輸入例子1:
16 2 10
17 
18 輸出例子1:
19 4
20 
21 */
22 //篩法求N以內的素數(普通法+優化),N>=2
23 #include <iostream>
24 #include <cmath>
25 #include <vector>
26 using namespace std;
27 ///尋找N以內的質數的個數
28 size_t find_Prime(int N)
29 {
30     if(1==N)
31         return 0;
32 
33     vector<int> prime_tmp(N,1);
34     for(int i=0; 2*i+3<=sqrt(N); i++)
35     {
36         if(prime_tmp[i])
37             for(int j=(2*i+3)+i; j<N; j+=(2*i+3))
38                 prime_tmp[j]=0;
39     }
40     vector<int> prime;
41     prime.push_back(2);
42     for(int i=0; i<N; i++)
43     {
44         if(prime_tmp[i] && 2*i+3<=N)//說明是質數,按照質數的方法處理
45         {
46             prime.push_back(2*i+3);
47         }
48     }
49 
50     return prime.size();//這里保存了小於等於N的素數
51 }
52 
53 int main()
54 {
55     int M,N;
56     while(cin>>M>>N){
57         cout<<find_Prime(N)-find_Prime(M-1)<<endl;
58     }
59     return 0;
60 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM