关于数论

1 .质数筛 \(x\)是否为质数

质数-若一个正整数无法被除了1和它自身之外的任何自然数整除,则称该数为
质数(prime)

否则称该正整数为
合数(Composite number)

  1. 试除法(定义)

      patr A
      bool Is_Prime(int x){
      if(x<2) return 0;
      for(int i=2;i<=x-1;i++)
          if(x%i==0) return 0;
      return 1;
     }
     part B
     bool Is_Prime(int x){
     if(x<2) return 0;
     for(int i=2;i*i<=x;i++)
         if(x%i==0) return 0;
      return 1;
     }
    

    一个数\(x\)如果有因数,一定是一个大于\(\sqrt{x}\)一个效应\(\sqrt{x}\)
    或者就是\(\sqrt{x}\)所以只要枚举1~\(\sqrt{x}\)

    2.埃氏筛oioioioio

    每个质数\(x\)的倍数\(2x,3x,4x......\)就是合数

     bool Check[];
     void Get_Prime(int n)//1~n{
         for(int i=2;i<=n;i++)
           if(!Check[i]){
             for(int j=2;i*j<=n;j++)
                 Check[i*j]=1;
          }
     }
    

    3 .线性筛

    埃氏筛会重复标记 12—既是3的倍数也是2的倍数

    所以线性筛!首先,任意一个合数都可以被分解成一个质数和一个数的积。对于任意一个合数,我们用“这个合数 = 最小质因数 × 最大因数(非自己)”,来表示

    bool Is_Prime[];
    int Prime[],top=0;
    void Get_Prime(int n){
          for(int i=2;i<=n;i++){
              if(!Is_Prime[i]) Prime[++top]=i;
              for(int j=1;i<=Prime[j]*i<=n&&j<=Top;j++){
                  Is_Prime[i*Prime[j]]=1;
                  if(i%Prime[j]==0) break;
              }
          }
    }  
    

2.欧拉函数(Euler's totient function)
欧拉 \(\varphi\)

\(\forall a,b \in N\),若\(a b\)的最大公因数为1,即\(gcd(a,b)=1 那么ab\) 互质

\(\varphi(n)\)就是1~n中与n互质的数的个数

将n分解质因数可得 \(n=p^{c_1}_1*p^{c_2}_2*...*p^{c_m}_m\)

\(\varphi(n)=n * \dfrac{p_1-1}{p_1}*\dfrac{p_2-1}{p_2}*...*\dfrac{p_m-1}{p_m}=n*\prod\limits_{质数p<n}(1-\dfrac{1}{p})\)

  • [推导]

  • \(n\)分解质因数后这些质因数在1~n中的倍数就是不能对\(\varphi(n)\)产生贡献的数,举个粒子:
    \(300=2^2*3^1*5^2\) 那么在\(1-300\)中 2 ,3 ,5 的倍数就无法与300互质1-300中有\(\dfrac{1}{2}*300\)个2的倍数,有\(\dfrac{1}{3}*300\)个3的倍数,有\(\dfrac{1}{5}*300\)个5的倍数

    \((\dfrac{1}{2}*300)+(\dfrac{1}{3}*300)+(\dfrac{1}{5}*300)=(\dfrac{1}{2}+\dfrac{1}{3}+\dfrac{1}{5})*300\)

    同理 6 既是2的倍数也是3的倍数

    10 既是2的倍数也是5的倍数

    15 既是5的倍数也是3的倍数

    这些数每个被减了两遍所以要加回来

    1-300中有\(300*\dfrac{1}{6}\)个6的倍数......

    所以\((\dfrac{1}{2}+\dfrac{1}{3}+\dfrac{1}{5}-\dfrac{1}{6}-\dfrac{1}{10}-\dfrac{1}{15})*300\)这么多个数与300不互质

    转化一下

    \((1-(\dfrac{1}{2}+\dfrac{1}{3}+\dfrac{1}{5}-\dfrac{1}{6}-\dfrac{1}{10}-\dfrac{1}{15}))*300=\varphi(300)\)

    然后因式分解

    \(\varphi(300)=(1-\dfrac{1}{2})*(1-\dfrac{2}{3})*(1-\dfrac{4}{5})*300\)

    !

    再来一个??

    \(\varphi(100)=1-(\dfrac{1}{2}+\dfrac{1}{5}-\dfrac{1}{10}))*100=(1-\dfrac{1}{2})*(1-\dfrac{4}{5})*100\)

    !!!

    int Got_Phi(int x){//找x的欧拉值
        int ans=x;//初始认为全与x互质 
        for(int i=2;i*i<=x;i++){
            if(x%i==0){//i是x的因数
              ans=ans*((i-1)/i);//如公式
              while(x%i==0) x/=i;//把次方剔除
            }
         }
        if(x>1) ans=ans*((x-1)/x);//x自己是质数
        return ans;
    }
    
    ## 晓
    
    
  1. Dirichlet 卷积

    已知两个数论函数 \(f(n),g(n)\)

    那么这两个函数的 狄利克雷卷积 \((f*g)(n)\) 的定义式为:

    \[(f * g)(n) = \sum_{k|n} f(k)g\left(\frac{n}{k}\right) = \sum_{k\ell=n} f(k)g(\ell) \]

    用自然语言描述可以理解为对所有 \(n\) 的正约数求和。

  2. 一些例子

    \(\tau\) 是除数个数函数,\(1\) 是常数函数

    \[\tau = 1 * 1 \iff \tau(n) = \sum_{d|n} 1 \]

    \(\tau(n)=1(n)*1(n)=\sum_{k|n}1\)

    \(\sigma\) 是除数和函数,\(id\) 是恒等函数

    \[\sigma = \text{id} * 1 \iff \sigma(n) = \sum_{d|n} d \]

    定义即可

  3. 狄利克雷的代数性质

    • \(f*g=g*f\)

    • \((f*g)*h=f*(g*h)\)

    • \((f+g)*h=f*h+g*h\)

    • 单位元 \(\varepsilon(n)=[n=1]\)

      \(f*\varepsilon =\varepsilon*f=f\)

    • 逆元:当且仅当 \(f(1)\ne 0\),存在 \(g\) 使得 \(f*g=g*f=\varepsilon\)

      \(g\)\(f\)Dirichlet 逆元,即 \(g=f^{-1}\)

      \(g(1)=\frac{1}{f(1)},g(n)=-\frac{1}{f(1)}\sum_{d|n}f(d)g(\frac{n}{d})\)

  4. 不会证明的定理(悲

    • \(f,g\) 是积性函数,那么 \(f*g\) 也是积性函数,而且 \(f^{-1}\) 存在且为积性函数。

    • 分配律,若 \(\alpha\) 是完全积性函数,那么有

      \[(\alpha f) * (\alpha g) = \alpha \cdot (f * g) \]

  5. 莫比乌斯函数

    • 如果 \(n=1\) ,那么 \(\mu(n)=1\)
    • 如果 \(n\) 的因子中有幂次大于\(1\)的数,那么 \(\mu(n)=0\)
    • 否则 \(\mu(n)=(-1)^k\) 其中 \(k\) 表示 \(n\) 的质因子个数

    根据定义容易证明莫比乌斯函数是积性函数

  6. 性质

    对于一个正整数 \(n\) 有:

    \(\sum_{d|n}\mu(d)=[n=1]\)

    也就是说:

    \(n=1\) 时,只有一个因子 \(d=1,\mu(1)=1\) 所以和为\(1\)

    \(n>1\) 时,所有因子的 \(\mu\) 值加起来和值为0

    证明:

    我们知道设 \(n\) 的质因数分解为:

    \(n=p_1^{a1}p_2^{a2} \dots p_k^{ak}\)

    根据定义,当 \(a_i\ge2\) 时,包含其的所有因子的 \(\mu\) 值都是 \(0\)

    那么我们就只考虑它素因子的贡献,就转化为

    \(n'=p_1p_2\dots p_k\)

    所以有 \(\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)\)

    由于是唯一的,即所有的因子拼起来都会有贡献

    那么选出来 \(i\) 个因子拼起来的次数就是 \(\binom{k}{i}\)

    枚举选出来的个数,就会有:

    \(\sum_{i=0}^{k}\binom{k}{i}(-1)^i=(1+(-1))^k=0^k\)

    那么当 \(k=0,n=1\) 时值为 \(1\),否则为 \(0\)

    那么根据狄利克雷卷积,我们就可以把这个表达式写成

    \[\varepsilon=1*\mu \]

    也就是说,莫比乌斯函数是常值函数 \(1\) 的狄利克雷逆

    那么我们把这个东西拿来判断两个数是否互质,就会有式子

    \([\gcd(i,j)=1]=\sum_{d|\gcd(i,j)}\mu(d)=\sum_d[d|i][d|j]\mu(d)\)

  7. 求法

    线性筛

    inline ve<int> get_mu(int n){
    	ve<int>mu(n+1),prime;mu[1]=1;
    	ve<bool>vis(n+1);prime.reserve(n);
    	rep(x,2,n,1){
    		if(!vis[x])
    			prime.pb(x),mu[x]=-1;
    		tep(p,prime){
    			if(x*p>n) bk;
    			vis[x*p]=1;
    			if(x%p==0){
    				mu[x*p]=0;
    				bk;
    			}else mu[x*p]=-mu[x];
    		}
    	}
    	re mu;
    }
    
  8. 莫比乌斯反演

    • 原式

      \(f(n),g(n)\) 是两个数论函数,那么有

      \(f(n)=\sum_{d|n}g(d)\Longleftrightarrow g(n)=\sum_{d|n}\mu\left(\frac{n}{d}\right)f(d)\)

    • 证明

      利用 Dirichlet 卷积,就会有式子

      \(f=1*g\Longleftrightarrow g=\mu*f\)

      由于 \(1*\mu=\varepsilon\),在两边同卷 \(\mu\)

      \(\mu*f=1*g*\mu=g*\varepsilon=g\)

  9. 反演例子

    • \(n=\sum_{d|n}\phi(d)\)\(id=1*\phi\)

      那么根据式子就会有 \(\phi=\mu*id\)

      \(\phi(n)=\sum_{d|n}d\mu(\frac{n}{d})\)

    • \(\sigma_k(n)=\sum_{d|n}d^k\)\(\sigma_k=1*id_k\)

      反演得到 \(id_k=\mu*\sigma_k\)

      \(n^k=\sum_{d|n}\mu(\frac{n}{d})\sigma_k(d)\)

posted @ 2025-02-26 16:32  rerecloud  阅读(43)  评论(0)    收藏  举报