欧拉函数:
就是对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。
欧拉函数的通式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn)
其中p1, p2…pn为n的所有质因数。φ(1)=1(唯一和1互质的数就是1本身)。
我也不知道通式怎么来的,记住吧。
单个欧拉函数代码
ll oula(ll n){
ll ans = n;
for(int i=2; i*i <= n; ++i)
{
if(n%i == 0)
{
ans = ans/i*(i-1);
while(n%i == 0)
n/=i;
}
}
if(n > 1) ans = ans/n*(n-1);
return ans;
}
线性筛(欧拉筛)预处理代码
int prim[maxn]; //存第i个素数
int ans[maxn]; //存欧拉函数值
int vis[maxn]; //标记素数
int cnt; //素数个数
void oula(){
ans[