欧拉函数的定义:
在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质(即gcd为1)的正整数(包括1)的个数,记作φ(n)。

欧拉函数的延伸:
小于或等于n的数中,与n互质的数的总和为:φ(x) * x / 2 (n>1)。
欧拉函数φ(x)模板:
ll Euler(int n)//即求φ(x)
{
ll ret=n;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)
{
ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))
while(n%i==0)
n/=i;
}
if(n>1)
ret=ret/n*(n-1);
return ret;
}
蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心之一。
算法模板:
ll Montgomery(ll base,ll exp)
{
ll res = 1;
while(exp)
{
if ( exp&1 )
res = (res*base) % mod;
exp >>= 1;
base = (base*base) % mod;
}
return res;
}
实用:若gcd(n,i) == 1,那么gcd(n,n-i)==1
/*************************************************************************************************************************************/