φ(n)表示比n小且和n互质的个数。
例: φ(8)=4 (1 3 5 7)
参考链接1
参考链接2
欧拉函数的通式和定义
欧拉函数的通式(注意:质因子就是 是质数的因子,1不是质数,所以1不是质因子)
Pi是n的质因子(是质数的因子)。注意:1不是质数,所以它不是质因子。
欧拉函数的证明
n是质数p的k次幂
若n是质数p的k次幂,。
因为除了p的倍数外,其他数都跟n互质。(也就是n的质因子只有p)
而以内是p的倍数的数一共有
个,
即,
把这些数去除,剩下的就是与n互质的数。
也可直接根据欧拉函数公式推出
欧拉函数是积性函数
这个以后要用别的方法证明,不能用欧拉函数,因为它是用来证明欧拉函数的。
可用中国剩余定理证明。
若m和n互质,。
也可直接根据欧拉函数公式推出
m和n互质时,Qi和Pi不重合,所以
欧拉函数的证明
有了上面两个条件,我们可以去证明欧拉函数了。
因为,所以
而,所以欧拉函数得证。
欧拉函数的一些性质
与n互质的小于n的数之和是
若n是质数,φ(n)=n-1,所有小于n的数都和n互质。
若n是奇数,φ(2n)=φ(n),根据欧拉函数公式推出来的。
欧拉函数的应用和模板
单个求解欧拉函数
int eurlar(int x)
{
int ret = x;
//1不是质数,所以也不是质因子
for (int i = 2; i <= sqrt(x) && x > 1; i++)
if (x%i == 0)
{
ret = ret / i * (i-1);
while(x%i == 0) ///把一个因子除干净,就能保证后面进来的都是质因子(相当于筛掉了后面的非质数)
x /= i;
}
if (x > 1)//最后可能剩下一个比sqrt(x)大的质因子,比如22 = 2*11
ret = ret / x * (x-1);//并且最多有一个,假设有两个,那么这两个数的成绩便超过了x本身
return ret;
}
求gcd(1,n)+...+gcd(n,n)的和f(n)
当p是质数的时,
对来说,
,而
所以,
因为,任何数都可以转化成质数的幂的乘积。
考虑(p为质数),
先假设所有小于的数都和它互质,那么结果是
,
而其实有p-1个数是p的倍数,且这p-1个数和p进行gcd的结果都是p。
(这p-1个数是)
所以,
接着考虑(p为质数),
是p的倍数但不是倍数的数一共有
个。
.....
同理,我们得到.
考虑最简单的情况,f(p*q) ,p、q都是质数.
根据上面的想法,同理得
由此,我们大胆假设,幂大于1的时候,也适用同样的公式,在此就不多加证明了。
现在如何求解已经显而易见了。