題目原型:
給定整數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 ...