埃氏篩法求給定區間內素數個數

2021-09-23 14:27:50 字數 794 閱讀 9641

題目原型:

給定整數a,b,請問區間內有多少個素數?

應對策略:

預備知識

埃氏篩法

思想是首先預設所有數都是素數,然後從2開始,對每個數字進行遍

歷,如果該數字是素數,那麼它的倍數就不是素數,與單獨判斷每個

數字是不是素數相比,如此可以大大減少判斷素數的時間。

int prime[max_n]

;bool isprime[max_n+1]

;int

shieve

(int n)

}return cnt;

}

進一步~~

對於求出給定區間[a,b]的素數。

1.先篩選好[2,√b]之間的素數,然後在[a,b]內篩去對應的倍數

即可。

typedef long long ll;

bool isprime[max_l];//

bool isprime_small[max_sqrt_b]

;//接下來進行對[a,b)進行篩選,假定若isprime[i-a]=1,則i是素數;即若isprime[0]=1,則a為素數。

ll segment_sieve

(ll a,ll b)

//備註:2ll是2的長整數形式

//(a+i-1)>=a;j>=a;

//顯然j從2*i開始,進行素數篩選.

} ll cnt=0;

for(ll i=

0;i)return cnt;

}

篩素數,求區間內素數個數

問題 1525 藍橋杯 演算法提高vip 找素數 時間限制 1sec 記憶體限制 128mb 提交 1179 解決 133 題目描述 給定區間 l,r 請計算區間中素數的個數。資料規模和約定 2 l r 2147483647 r l 1000000 輸入兩個數l和r。輸出一行,區間中素數的個數。樣例...

埃氏篩法 素數篩

埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...

素數 埃氏篩法

題目 求2 100以內的素數。素數 prime number 又稱質數,是指乙個大於1的自然數,除了1和它本身外,不能被整除以其他自然數。解法一 根據素數的定義,即用該數除比其小的數 1除外 都不能除盡,即為素數 public class prime if i n system.out.print ...