欧拉函数(总结)

欧拉函数

定义

欧拉函数ϕ(n)是不超过n且和n互质的正整数的个数。欧拉函数φ(n)的作用就是转化,从而简化运算(小性质:n的所有质因子之和=eular(n)*n/2);

下面直观地看看欧拉函数:

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
φ(n) 1 1 2 2 4 2 6 4 6 4 10 4 12 6 8

定理

  • 定理1 算术函数f如果满足对于任意两个互质的正整数m和n,均有f(mn)=f(m)f(n),就称f为积性函数(或乘性函数)。如果对于任意两个正整数m和n,均有f(mn)=f(m)f(n),就称为完全积性函数。

  • 定理2 若m、n互质,ϕ(mn)=ϕ(m)ϕ(n),所以欧拉函数是积性函数。因为mn互质,和m互质的数乘上和n互质的数就会和mn互质。

  • 定理3              

  • 欧拉函数的两种求法

#include<iostream>
using namespace std;
int phi[100011];
int eular(int n){//求一个数的欧拉值
        int res=n;
        if(n==1)
                return 1;
        for(int i=2;i<=n;i++){
                if(n%i==0){
                        res=res/i*(i-1);
                        while(n%i==0)
                                n/=i;
                }
        }
        return n>1?res/n*(n-1):res;
}
void eularplus(int n){//求多个数的欧拉值
        for(int i=1;i<=n;i++)
                phi[i]=i;
        for(int i=2;i<=n;i++){
                if(phi[i]==i){
                        for(int j=i;j<=n;j+=i)
                                phi[j]=phi[j]/i*(i-1);
                }
        }
}
int main()
{
        int n;
        scanf("%d",&n);
        printf("%d
",eular(n));
        eularplus(n);
        for(int i=1;i<=n;i++)
                printf("%d ",phi[i]);
        printf("
");
        return 0;
}
// 15
// 8
// 1 1 2 2 4 2 6 4 6 4 10 4 12 6 8
原文地址:https://www.cnblogs.com/aeipyuan/p/10182214.html