zoukankan      html  css  js  c++  java
  • 浅谈欧拉函数

    一.简介

      我们定义一种函数φ(x),它的值为比x小的数里与x互质的数的个数。

    其计算公式是 (其中p1, p2……pn为x的所有质因数,x是不为0的整数)。

      定义φ(1) = 1

      这个公式可以这样理解,对于整数x的任何一个素因子pi,在1-n中,它的倍数的个数为x/pi,剩下的数就是x*(1-1/pi)个。至于为什么用的连乘而不是连加,这个跟容斥有关系,有的数可能同时是多个素因子的乘积,可能被多次计算,在此不做证明。

    二.代码实现

    求单个数的欧拉函数

    typedef long long LL;
    LL eular(LL n)
    {
        LL ans = n;
        for(int i = 2;i*i<=n;++i)
        {
            if(n%i==0)
            {
                ans-=ans/i;
                while(n%i==0)
                    n/=i;
            }
        }
        if(n>1) ans-=ans/n;
        return ans;
    }

    欧拉函数打表

    //线性筛(同时得到欧拉函数和素数表)
    const int maxn = 1e7;
    bool check[maxn+10];
    int phi[maxn+10];
    int prime[maxn+10];
    int tot;//素数个数
    void phi_and_prime_table(int N)
    {
        memset(check,false,sizeof(check));
        phi[1] =1;
        tot =0;
        for(int i =2;i<=N;++i)
        {
            if(!check[i])
            {
                prime[tot++] = i;
                phi[i] = i-1;
            }
            for(int j = 0;j<tot;++j)
            {
                if(i*prime[j]>N)
                    break;
                check[i*prime[j]] = true;
                if(i%prime[j]==0)
                {
                    phi[i*prime[j]] = phi[i]*prime[j];
                    break;
                }
                else
                    phi[i * prime[j]] = phi[i] * (prime[j]-1);
            }
        }
    }

    三.欧拉函数的性质

    1. 对于一个素数pφ(p ) = p -1
    2. 欧拉函数是积性函数,但不是完全积性函数,所以仅对两个互质的数pqφ(pq) =φ(p)*φ(q)
    3. N>1,不大于N且与N互素的所有正整数的和是φ(N)*N/2
    4. p为质数,n = pk,则φ(n) = pk  -  pk-1
    5. m =2 nm互质且n为奇数时,φ(2*n)  = φ(n)
    6. n>2时,φ(n)是偶数
    7. n的因数(包括1和他自己)的欧拉函数之和等于n

    四.相关习题

  • 相关阅读:
    学习笔记-Python-Django-环境搭建、路由
    Python数据科学-技术详解与商业实践(文末附资源)
    09 Django 模型(数据库)
    pandas入门
    08 Django 模板进阶
    Django学习中常见问题
    07 Django 模板
    06 Django URL name详解
    05 Django 视图与网址进阶
    04 Django 视图与网址-urls.py
  • 原文地址:https://www.cnblogs.com/baihualiaoluan/p/12239084.html
Copyright © 2011-2022 走看看