zoukankan      html  css  js  c++  java
  • 欧拉函数(总结)

    欧拉函数

    定义

    欧拉函数ϕ(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
  • 相关阅读:
    [C++]猜词游戏简版
    [C++]异常处理实例-基础版
    C++Primer Plus习题记录-Chapter12
    C++Primer Plus习题记录-Chapter11
    [C++]MI(多继承)实例-基础版
    Windows下编译libevent及使用
    jquery点击回到顶部
    简体繁体转换
    检测ip和地区
    点击复制到剪切板
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10182214.html
Copyright © 2011-2022 走看看