1. 程式人生 > >【模板】尤拉篩法(線性篩法)

【模板】尤拉篩法(線性篩法)

 1 int n;
 2 int p[MAX_N], cnt;
 3 bool b[MAX_N];
 4  
 5 void Euler()
 6 {
 7     b[0] = b[1] = 1;
 8     for(register int i = 2; i <= n; ++i)
 9     {
10         if(!b[i]) p[cnt++] = i;
11         for(register int j = 0; i * p[j] <= n; ++j)
12                 // 不需要判斷j < cnt, 因為中途定然會break出去
13
{ 14 b[i * p[j]] = 1; 15 if(!(i % p[j])) break; 16 // 當出現這種情況時, i * p[j + k(k > 0, j + k < cnt)]的情況一定會被後面給篩掉 17 } 18 } 19 return; 20 }