題目描述
給定區間[l,r] (l≤r≤2147483647,r-l≤1000000),請計算區間中素數的個數。
輸入格式
兩個數l和r。
輸出格式
一行,區間中素數的個數。
輸入輸出樣例
輸入 #1
2 11
輸出 #1
此題有乙個坑。
若乙個數是int_max,看起來用int是可以的。但若是把這個數+1了呢?
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
1e6+10;
int flag[maxn]
;int prim[maxn]
;int ansarr[maxn]
;int tot;
void
getprim()
}}intmain()
}int ans =0;
for(ll i = l; i <= r; i++)if
(ansarr[i - l]==0
) ans++
; cout << ans << endl;
return0;
}
洛谷p1835 素數密度 (線性尤拉篩,埃式篩)
題目分析 難度 普及 提高 暴力40分做法 從l到r進行列舉,然後判斷是否為素數!但這樣顯然是不對的,要結合篩法來解決此題,雖然l,r的範圍是整個int的取值,但是兩者的差值為1e6,可以從此突破!預備知識 解決乙個問題 求出不大於n的素數的個數 樸素篩法 時間複雜度 o n根號n 普通樸素演算法 ...
埃氏篩 尤拉篩
對於1 n範圍內素數的查詢,我們常用的二重迴圈暴力演算法的複雜度是o n2 如果利用開根縮小範圍的時間複雜度也無非是在o n nn sqrt n nn 而,這些演算法對於n在105以內都是可以接受的,但是如果需要更大範圍的素數表,這些演算法將顯得力不從心。下面將介紹更加高效的演算法。埃氏篩也叫素數篩...
素數篩法 埃氏篩及尤拉篩
在做題中會經常遇到有關素數的問題,整理一下學過的兩種素數篩法。時間複雜度 o nloglogn 我們知道乙個素數的倍數肯定是乙個合數,乙個合數可以由多個素數相乘得到,所以可以從2開始把2的倍數篩一遍,找到下個素數在篩一遍。篩完後素數的倍數都被篩掉了,剩下的就是素數。如下 const int n 1e...