zoukankan      html  css  js  c++  java
  • 莫比乌斯函数介绍&&基础

    定义

    设正整数$N$按照算术基本定理分解质因数为$N=p_1^{c_1}p_2^{c_2} cdots P_m^{c_m}$,定义函数:

    $$mu(N)= left{egin{matrix}
    0 c_i geq 1  \
    1   mequiv 0(mod 2)), c_i=1 \
    -1   mequiv 0(mod 2)), c_i=1
    end{matrix} ight.$$

    称$mu(N)$为Mobius函数(莫比乌斯函数).

     通俗地讲,当$N$包含相等的质因子时,$mu(N)=0$。当$N$的所有质因子各不相同时,若$N$有偶数个质因子,$mu(N)=1$,若$N$有奇数个,$mu(N)=-1$.

    实现

    若只求一项Mobius函数,则分解质因数即可。若求$1 sim N$的每一项Mobius函数,可以利用$Eratosthenes$筛法。把所有$mu$初始化为1。接下来,对于筛出的每个质数$p$,令$mu(p)=-1$,并扫描$p$的倍数 $x=2p, 3p, cdots,left lfloor n/p ight floor * p$,检查$x$能否被$p^2$整除。若能,则令$mu(x)=0$,否则令$mu(x) = - mu(x)$.

     1 void getmiu(int n)
     2 {
     3     for(int i=1;i <= n;i++)  miu[i]=1, vis[i];
     4     for(int i=2;i <= n;i++)
     5     {
     6         if(vis[i])  continue;
     7         miu[i] = -1;    //i没有被访问,说明i是素数
     8         for(int j = 2*i; j <= n;j += i)
     9         {
    10             vis[j] = 1;
    11             if(j % (i*i) == 0)  miu[j] = 0;  //含有平方因子
    12             else  miu[j] *= -1;
    13         }
    14     }
    15 }
  • 相关阅读:
    第二次作业
    大学——新生活方式
    第四次作业
    第三次作业
    第二次作业——起航
    梦开始的地方
    第四次作业
    第三次作业
    第二次作业
    博客作业 随笔
  • 原文地址:https://www.cnblogs.com/lfri/p/11175162.html
Copyright © 2011-2022 走看看