就是对于一个正整数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的所有质因数,n是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。
ll eular(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); // 若 n > 1 则说明还有一个因子没有除,即为 n 把 i 换做 n即可
return ans;
}
代码解析: