欧拉筛 + 欧拉函数

Posted chunibyo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉筛 + 欧拉函数相关的知识,希望对你有一定的参考价值。

技术分享图片
 1 /**
 2  *  Fuck you.
 3  *  I love you too.
 4  */
 5 #include<bits/stdc++.h>
 6 #define lson i<<2
 7 #define rson i<<2|1
 8 #define LS l,mid,lson
 9 #define RS mid+1,r,rson
10 #define mem(a,x) memset(a,x,sizeof(a))
11 #define gcd(a,b) __gcd(a,b)
12 #define ll long long
13 #define ull unsigned long long
14 #define lowbit(x) (x&-x)
15 
16 const int INF = 0x3f3f3f3f;
17 const int EXP = 1e-8;
18 const int n = 1e5 + 5;
19 const int MOD = 1e9 + 7;
20 const int MAXN = 1e5 + 5;
21 
22 using namespace std;
23 
24 bool notprime[MAXN];    //是否为素数
25 int prime[MAXN];        //素数表
26 int phi[MAXN];          //欧拉函数表
27 
28 void euler_sieve () {
29     int tot = 0;
30     mem (notprime, 0);
31     for (int i = 2; i < MAXN; ++i) {
32         if (!notprime[i]) {
33             prime[tot++] = i, phi[i] = i - 1;
34         }
35         for (int j = 0; j < tot; ++j) {
36             if (i * prime[j] > MAXN) {
37                 break;
38             }
39             notprime[i * prime[j]] = 1;
40             if (i % prime[j] == 0) {
41                 phi[i * prime[j]] = phi[i] * prime[j];
42                 break;
43             } else {
44                 phi[i * prime[j]] = phi[i] * (prime[j] - 1);
45             }
46         }
47     }
48 }
49 
50 int main() {
51     euler_sieve();
52     for (int i = 2; i <= 10; i++) {
53         cout << phi[i] << endl;
54     }
55     return 0;
56 }
View Code

 

以上是关于欧拉筛 + 欧拉函数的主要内容,如果未能解决你的问题,请参考以下文章

欧拉筛线性处理莫比乌斯函数

欧拉函数 欧拉筛法

线性(欧拉)筛&欧拉函数

欧拉筛 + 欧拉函数

欧拉筛转载自用

欧拉筛素数+求欧拉函数