欧拉函数
定义:
1~n中与n互质的数的个数称为欧拉函数,记为 φ ( n ) \varphi(n) φ(n)
φ ( 1 ) = 1 \varphi(1)=1 φ(1)=1
φ ( 2 ) = 1 \varphi(2)=1 φ(2)=1
φ ( 3 ) = 2 \varphi(3)=2 φ(3)=2
性质:
1、若p是质数, φ ( p ) \varphi(p) φ(p)=p-1
2、若p是质数, φ ( p k ) \varphi(p^{k}) φ(pk)= p k − 1 ∗ ( p − 1 ) p^{k-1}*(p-1) pk−1∗(p−1)
性质二解释:
1 , . . . , p , . . . , 2 ∗ p , . . . . . . , p k 1,...,p,...,2*p,......,p^{k} 1,...,p,...,2∗p,......,pk
可以将它们分段处理:
1,...,p\],\[p+1,...,2\*p\],...
可以发现每一段的大小都是p,所以会有 p k / p p\^{k}/p pk/p段,每一段都有(p-1)个,所以答案就是上述的描述
3、积性函数:若gcd(m,n)=1,则 φ ( m n ) = φ ( m ) ∗ φ ( n ) \\varphi(mn)=\\varphi(m)\*\\varphi(n) φ(mn)=φ(m)∗φ(n)
### 计算公式:

### 总结:
根据推导的公式可以得出欧拉函数只与n和其1\~n之间的质数有关
### 代码:
```cpp
#include
#define int long long
#define ull unsigned long long
using namespace std;
const int N=2e5+10;
int primes[N],cnt=0;
bool vis[N];
int phi[N];
void init(){
phi[1]=1;
for(int i=2;i>n;
for(int i=1;i<=n;i++)cout<>_;
while(_--)solve();
}
```
## 欧拉反演
### 定义:
对于任意的正整数n有:
∑ d ∣ n ϕ ( d ) = n \\sum_{d \\mid n}\\phi(d)=n ∑d∣nϕ(d)=n
n的所有的因数(包含1和n本身)的欧拉函数之和等于n
### 证明:

### 应用:
求解 ∑ i = 1 n g c d ( i , n ) \\sum_{i=1}\^{n}gcd(i,n) ∑i=1ngcd(i,n)的时候可以优化,步骤如下:
g c d ( i , n ) = ∑ d ∣ g c d ( i , n ) ϕ ( d ) gcd(i,n)=\\sum_{d\|gcd(i,n)}\\phi(d) gcd(i,n)=∑d∣gcd(i,n)ϕ(d)

### 例题:
### 题目思路:

### 代码:
```cpp
#include
#define int long long
#define ull unsigned long long
using namespace std;
const int N=2e5+10;
int primes[N],cnt=0;
bool vis[N];
int phi[N];
void init(){
phi[1]=1;
for(int i=2;i>n;
vectora(n+1);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a.begin()+1,a.end());
vectorcnt(N);
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j*j<=a[i];j++){
if(a[i]%j==0){
sum+=(n-i)*phi[j]*cnt[j];
cnt[j]++;
if(j*j!=a[i]){
sum+=(n-i)*phi[a[i]/j]*cnt[a[i]/j];
cnt[a[i]/j]++;
}
}
}
}
cout<>_;
while(_--)solve();
}
```