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 }
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 }
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 }