Screen various useful linear

Linear sieve primes:

 1 int cnt, prime[N];
 2 bool vis[N];
 3 void getprime(int n) {
 4     vis[0] = vis[1] = 1;
 5     for (int i = 2; i <= n; i++) {
 6         if (!vis[i]) {
 7             prime[++cnt] = i;
 8         }
 9         for (int j = 1; j <= cnt && i * prime[j] <= n; j++) {
10             vis[i * prime[j]] = true;
11             if (i % prime[j] == 0) {
12                 break;
13             }
14         }
15     }
16 }
View Code

Linear sieve Euler function:

 1 int cnt, prime[N], phi[N];
 2 bool vis[N];
 3 void getphi(int n) {
 4     vis[0] = vis[1] = 1;
 5     for (int i = 2; i <= n; i++) {
 6         if (!vis[i]) {
 7             prime[++cnt] = i;
 8             phi[i] = i - 1;
 9         }
10         for (int j = 1; j <= cnt && i * prime[j] <= n; j++) {
11             vis[i * prime[j]] = true;
12             if (i % prime[j] == 0) {
13                 phi[i * prime[j]] = phi[i] * prime[j];
14                 break;
15             } else {
16                 phi[i * prime[j]] = phi[i] * (prime[j] - 1);
17             }
18         }
19     }
20 }
View Code

Mobius sieve linear function:

1  int cnt, prime [N], mu [N];
2  bool Show [N];
3  void getmu ( int n) {
 4      show [ 0 ] = manner [ 1 ] = 1 ;
5      mu [ 1 ] = 1 ;
6      for ( int i = 2 ; i <= n; i ++ ) {
 7          if (! Display [i]) {
 8              prime [cnt ++] = i;
9              mu [i] = - 1 ;
10          }
 11         for (int j = 1; j <= cnt && i * prime[j] <= n; j++) {
12             vis[i * prime[j]] = true;
13             if (i % prime[j] == 0) {
14                 mu[i * prime[j]] = 0;
15                 break;
16             } else {
17                 mu[i * prime[j]] = -mu[i];
18             }
19         }
20     }
21 }
View Code

 

Guess you like

Origin www.cnblogs.com/Sundial/p/11854677.html