P1835 素數密度 尤拉篩 埃氏篩法

2021-10-09 21:46:08 字數 725 閱讀 3812

題目描述

給定區間[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...