• 线性筛法与积性函数


    欧拉函数:

    \(1.\varphi(p)=p-1\)

    证明:显然


    \(2.\varphi(i*p)=p*\varphi(i)\) , \(if\space i \bmod p = 0\)

    引理1:\(\varphi(p^a)=(p-1)*p^{a-1}\)

    证明:比 \(p^a\) 小的数一共有 \(p^a-1\) 个,其中与 \(p^a\) 不互质的且小于 \(p^a\)
    ,即 \(p\) 的倍数 \(p*t\) 一共有 \(p^{a-1}-1\) 个,则 \(\varphi(p^a)=p^a-1-(p^{a-1}-1)=(p-1)*p^{a-1}\)

    引理2:\(\varphi(n)=n*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*···*(1-\frac{1}{p_k})\)

    证明:

    \(\varphi(n)\)

    \(=\varphi(p_1^{a_1})*\varphi(p_2^{a_2})*···*\varphi(p_k^{a_k})\)

    \(=(p_1-1)*p_1^{a_1-1}*(p_2-1)*p_2^{a_2-1}*···*(p_k-1)*p_k^{a_k-1}\)

    \(=(p_1^{a_1}-p_1^{a_1-1})*···*(p_k^{a_k}-p_k^{a_k-1})\)

    \(=p_1^{a_1}*(1-\frac{1}{p_1})*···*p_k^{a_k}*(1-\frac{1}{p_k})\)

    \(=(p_1^{a_1}*p_2^{a_2}*···*p_k^{a_k})*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*···*(1-\frac{1}{p_k})\)

    \(=n*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*···*(1-\frac{1}{p_k})\)

    证明:

    \(i\) 为正整数,且 \(i=p_1^{k_1}*p_2^{k_2}*···*p_n^{k_n}\)

    \(\varphi(i)=i*(1-\frac{1}{p_1})*···*(1-\frac{1}{p_n})\)

    \(\because i\bmod p=0\)

    \(\therefore p为i的质因子\)

    \(\therefore \varphi(i*p)=i*p*\prod_{i=1}^{n} (1-\frac{1}{p_i})=\varphi(i)*p\)


    \(3.\varphi(i*p)=\varphi(i)*(p-1)\) , \(if\space i \bmod p \ne 0\)

    证明:

    \(\because i \bmod p \ne 0\)

    \(\therefore p不为i的质因子\)

    \(\therefore \varphi(i*p)=i*p*(1-\frac{1}{p})*\prod_{i=1}^n (1-\frac{1}{p_i})=i*(p-1)*\prod_{i=1}^n (1-\frac{1}{p_i})=\varphi(i)*(p-1)\)


    于是可以通过这三个性质再配合上线性筛预处理处欧拉函数。

    Code:

    void Get(int listsize)
    {
        memset(isprime,1,sizeof(isprime));
        isprime[1]=false;
        for(int i=2;i<=listsize;i++)
        {
            if(isprime[i])
            {
                 prime[++primesize]=i;
                 phi[i]=i-1;
             }
             for(int j=1;j<=primesize&&i*prime[j]<=listsize;j++)
             {
                isprime[i*prime[j]]=false;
                if(i%prime[j]==0)
                 {
                    phi[i*prime[j]]=phi[i]*prime[j];
                    break;
                }
                phi[i*prime[j]]=phi[i]*(prime[j]-1);
            }
        }
    }
    

    约数个数&约束和筛法:!!!!

  • 相关阅读:
    将Color的格式转变成颜色值
    F# 学习笔记 1 基础学习
    GridView 72般绝技
    前台直接读取Web.config中的值的方法
    根据属性名称 获取对象的属性值
    字符集与字符编码简介(转)
    一个WinForm程序配置信息的简单模型和维护工具——设计说明
    扩展DLL调用扩展DLL的LINK2001错误的解决办法之一
    CProfile : 读写私有INI配置文件
    日记:如何在MFC中使用Winsock2
  • 原文地址:https://www.cnblogs.com/wwlwQWQ/p/11377343.html
Copyright © 2020-2023  润新知