單個素數判斷
//素數判斷(小資料)
int prime(int n)
//miller-rabin(大素數判定) 單個數字n複雜度15*log(n)
int mr[30] = ;
//此陣列為測試用的a,這12個可測所有的long long int;
lli miller_rabin(lli n)
if(x != 1) return false;
}return true;
}
區間素數篩
//厄拉多塞素數篩法,複雜度》o(n*log(log(n)))
bool mark[maxn];
void sieve_prime()
//尤拉素數篩法複雜度o(n)
bool isprime[maxn];
lli primelist[maxn],primecount = 0;
void eular_sieve(lli n)
for(int j = 1; j <= primecount; j ++)
}}
素數篩法的應用
help hanzo
題意就是求[a,b]區間內的素數個數(1 ≤ a ≤ b < 231, b - a ≤ 100000);
很明顯,如果直接篩肯定不行……,見**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define pi acos(-1.0) #define maxn (500000 + 5) #define mol 1000000000 + 7 #define lowbit(x) (x & (-x)) using namespace std; typedef long long int lli; bool flag[100000 + 20]; bool isprime[maxn]; lli primelist[maxn],primecount = 0; void eular_sieve(lli n) for(int j = 1; j <= primecount; j ++) } } int main() for(int i = 0;i <= n;i ++) if(flag[i]) cnt ++; printf("case %d: %d\n",case,cnt); } return 0; }
素數判斷及篩法
素數 prime number 又稱質數,有無限個。素數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。問法1 給定乙個數n,判斷n是不是素數 一 暴力列舉 列舉2 n 1分別當做除數,判斷是否能整除,如果某個數能把n整除,那麼就說明n不是素數,如果所有都不能整除,那麼n就是素數。注 n...
數論 多種素數判斷法及素數篩法
水了一篇啊.眾所周知,大於等於 2 的僅含有 1 和自身這兩個因子的正整數被稱作素數 故只要判斷在 2,n 1 範圍內是否存在其它因子,就可以判斷 n 是否為素數了 無腦判斷法直接從 2 for到 n 1 稍微優化下可以縮減到 2,frac n 2 但這個方法時間複雜度為 o n 可以發現,如果某個...
素數判斷(篩法)
最簡單寫法 int isprime int n for int i 2 i n i return1 初步優化 乙個數的因數是成對出現的,其中乙個因數在開方後的前面乙個在開方後的後面,所以只需判斷它前面的數就可以了,如果前面都沒有,那麼它後面更不會有.這樣就可以減少迴圈次數.int isprime i...