小x的质数(线性O(n)筛素数)
生活随笔
收集整理的這篇文章主要介紹了
小x的质数(线性O(n)筛素数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小x的質數
題目描述
小 X 是一位熱愛數學的男孩子,在茫茫的數字中,他對質數更有一種獨特的情感。小 X 認為,質數是一切自然數起源的地方。
在小 X 的認知里,質數是除了本身和?11?以外,沒有其他因數的數字。
但由于小 X 對質數的熱愛超乎尋常,所以小 X 同樣喜歡那些雖然不是質數,但卻是由兩個質數相乘得來的數。
于是,我們定義,一個數是小 X 喜歡的數,當且僅當其是一個質數,或是兩個質數的乘積。
而現在,小 X 想要知道,在?LL?到?RR?之間,有多少數是他喜歡的數呢?
輸入格式
第一行輸入一個正整數?QQ,表示詢問的組數。
接下來?QQ?行。包含兩個正整數?LL?和?RR。保證?L \le RL≤R。
輸出格式
輸出?QQ?行,每行一個整數,表示小 X 喜歡的數的個數。
數據范圍與約定
樣例
樣例解釋 1
66?以內的質數有?2,3,52,3,5,而?4=2 * 2,6 = 2 * 34=2?2,6=2?3。因此?2,3,4,5,62,3,4,5,6?都是小 X 喜 歡的數,而 1 不是。
樣例輸入1
1 1 6樣例輸出1
5樣例輸入2
10 282 491 31 178 645 856 227 367 267 487 474 697 219 468 582 792 315 612 249 307樣例輸出2
97 78 92 65 102 98 114 90 133 29樣例輸入3
10 20513 96703 15236 86198 23185 78205 40687 48854 42390 95450 63915 76000 36793 92543 35347 53901 44188 76922 82177 90900樣例輸出3
24413 23001 17784 2669 16785 3833 17712 6028 10442 2734?
code
1 #include<cstdio> 2 #include<cmath> 3 4 const int MAXN = 10000100; 5 6 bool lk[MAXN],noprime[MAXN]; 7 int prime[MAXN]; 8 int sum[MAXN]; 9 10 int read() { 11 int x = 0,f = 1;char ch = getchar(); 12 for (; ch<'0'||ch>'9'; ch = getchar()) 13 if (ch=='-') f = -1; 14 for (; ch>='0'&&ch<='9'; ch = getchar()) 15 x = x*10+ch-'0'; 16 return x*f; 17 } 18 19 int main() { 20 21 int tot = 0; 22 23 for (int i=2; i<=10000000; i++) { 24 if (!noprime[i]) { 25 prime[++tot]=i; 26 lk[i] = true; 27 for (int j=1; j<=tot && i*prime[j]<=10000000; j++) { 28 noprime[i*prime[j]] = true; 29 lk[i*prime[j]] = true; 30 } 31 } 32 else { 33 for (int j=1; j<=tot&&i*prime[j]<=10000000; j++) { 34 noprime[i*prime[j]] = true; 35 if(i % prime[j] == 0) break ; 36 } 37 } 38 } 39 40 for (int i=1; i<=10000000; ++i) { 41 if (lk[i]) sum[i] = sum[i-1]+1; 42 else sum[i] = sum[i-1]; 43 } 44 45 int L,R,q = read(); 46 while (q--) { 47 L = read();R = read(); 48 printf("%d\n",sum[R]-sum[L-1]); 49 } 50 51 return 0; 52 }?
轉載于:https://www.cnblogs.com/mjtcn/p/7588708.html
總結
以上是生活随笔為你收集整理的小x的质数(线性O(n)筛素数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 2788[Poi2012]Fe
- 下一篇: 网络存储服务器