数学知识小结#1

PREFACE

时隔数月尝试拾起以往的OI知识发现异常的艰难,于是准备慢慢的填坑,可能比较简略并且穿插不少英文(万一面试的时候问起OI还能说几句pao),但是我英语太菜了,如果您发现了错误或是需要改进的地方,欢迎联系我或是在下方评论

小结#1主要是数论部分,小结#2到时看情况在更吧

update:里面的除法都是指下取整

质数与约数Prime Number&Divisors

质数筛法Sieve

  • 埃拉托斯特尼筛法Sieve of Eratosthenes
    主要思想是任意整数x的倍数2x,3x...都不是质数
    由于在筛x的倍数时,小于\(x^2\)的数已经被筛过(显然),我们直接从\(x^2\)开始筛

    void EratosthenesSieve(int n){
      memset(vis,0,sizeof(vis));
        for(int i=2;i<=n;i++){
          if(vis[i])continue;
              for(int j=i*i;j<=n;j+=i)vis[j]=1;
        }
    }
  • 欧拉线性筛Euler‘s Linear Sieve

    埃式筛在筛一些数时还是会重复(比如12会被2和3同时筛一遍),但是只要我们让我们要筛的数的质因子从小到大累计,即每个数只会被它的最小质因子筛一次,这样的话每个数只会被筛一次,复杂度就是线性的了

    void EulerSieve(int n){
        memset(vis,0,sizeof(vis));
        memset(prime,0,sizeof(prime));
        cnt=0;
        for(ri i=2;i<=n;i++){
            if(vis[i]==0){//i is a prime number
                prime[++cnt]=i;
            }
            for(ri j=1;j<=cnt&&prime[j]*i<=n;j++){
                vis[i*prime[j]]=1;
                if(i%prime[j]==0)break;//now i can be divided by prime[j],so prime[j+1] is not the least prime divisor of the i*prime[j+1]
            }
        }
    }

质因数分解Prime Factorization

  • 算术基本定理Fundamental Theorem Of Arithmetic

    也称为唯一分解定理(unique factorization theorem),是指任何一个大于1的正整数都能被唯一分解为有限个质数的乘积,可写作

    \[N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\]

    其中\(p_i\)是质数且\(p_1<p_2<...<p_m\)

    Every positive integer n>1 can be represented in exactly one way as a product of prime powers

    \[N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\]

    where \(p_1<p_2<...<p_m\) are primes and the \(n_i\) are positive intergers.

    (来源: 维基百科)

最大公约数Greatest Common Divisors

  • 定义:

    根据字面意思,自然数\(a\)和\(b\)的公约数中最大的d就是a和b的最大公约数,称为\(gcd(a,b)\)

  • 定理:

    \(gcd(a,b)\)*\(lcm(a,b)=a\)*$b $

  • 更相减损法

    \(\forall a>b,a,b \in N\) \(gcd(a,b)=gcd(a,a-b)=gcd(b,a-b)\)

  • 辗转相除法

    \(\forall a,b \in N\) \(gcd(a,b)=gcd(b,a \mod b)\)

积性函数相关Multiplicative Funtion

  • 积性函数定义:

    若对任意互质\(a,b\)(即\(gcd(a,b)=1\)),有\(f(ab)=f(a)f(b)\),则称函数\(f\)为积性函数

    特殊地,若对任意正整数都有\(f(ab)=f(a)\) * \(f(b)\),则称函数\(f\)为完全积性函数(Completely Multiplicative Function)

    显然若\(N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\),则\(f(N)= \prod_{i=1}^m f(p_i^{c_i})\)

    于是求一个积性函数我们可以设法套用筛法求出

  • 欧拉函数(Euler Tocient Funciton)定义:

    在\(1\)到\(N\)中与\(N\)互质的数的个数称为欧拉函数,记作\(\phi(N)\)

    若\(N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\)

    则\(\phi(N)=N\)*\(\frac{p_1-1}{p_1}\)*\(\frac{p_2-1}{p_2}\)*\(...\)*$ \frac{p_m-1}{p_m}$

    这个式子可以由容斥原理(The Principle Of Inclusion-exclusion)推得

  • 欧拉函数性质
    • 对于一个质数N,\(\phi(N)=N-1\)
    • 对于\(N=p^k\)(\(p\)是质数),\(\phi(N)=p^k-p^{k-1}\)

      简要证明:此时只有\(p,2p,3p...\)等\(p^{k-1}\)个数与\(N\)不互质

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

      简要证明:设\(f(n)=\sum_{d|n} \phi(d)\),发现它是个积性函数

      又因为\(f(p_i^{c_i})=\phi (1) + \phi (p)+...+\phi (p_i^{c_i})\)根据上一条性质,就等于\(p_i^{c_i}\)

      于是\(f(n)= \prod_{d|n} f(p_i^{c_i}) = \prod p_i^{c_i} =n\)

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

      简要证明: 莫比乌斯反演,见下

  • 莫比乌斯函数(Mobious Function)定义

    设正整数\(N=p_1^{c_1}p_2^{c_2}...p_m^{c_m}\)

    定义函数
    \(\mu(n)= \begin{cases} (-1)^m & \text{when $c_1=c_2=…=c_m=1$,}\\ 0 & \text{otherwise} \end{cases}\)

    为莫比乌斯函数

    它有个比较有用的性质

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

    它也是积性函数,于是我们可以运用欧拉线性筛求出\(1-N\)的莫比乌斯函数

    void Mobious(int n){
      memset(vis,0,sizeof(vis));
      mu[1]=1;
      for(ri i=2;i<=n;i++){
          if(vis[i]==0){//prime number
              mu[i]=-1;
              prime[++cnt]=i;
          }
          for(ri j=1;j<=cnt&&prime[j]*i<=n;j++){
              vis[prime[j]*i]=1;
              if(i%prime[j]==0){
                  mu[i*prime[j]]=0;//c_i !=1
                  break;
              }
              mu[i*pri[j]]=-mu[i];
          }
      }
    }
  • 数论函数(Arithmetic Funtion)

    似乎也可以说Number Theoretic Function,是指定义域为正整数的函数

    A number theoretic funtion is a function whose domain is the set of positive integers

  • 莫比乌斯反演公式(Mobius Inversion Formula)

    对于两个数论函数\(F(n)\)和\(f(n)\),且满足

    \(F(n)=\sum_{d|n} f(d)\)

    那么\(f(n) = \sum_{d|n} \mu(d) F(\frac{n}{d})\)

    简要证明:

    \(\sum_{d|n} \mu(d) F(\frac{n}{d})=\sum_{d|n} \mu(d) \sum_{i|{\frac{n}{d}}} f(i)\)

    对于第二个式子,我们考虑每个\(f(i)\)对几个\(\mu(d)\)作贡献,发现等价于

    \(\sum_{i|n} f(i) \sum_{d|{\frac{n}{i}}} \mu(d)\)

    再由\(\sum_{d|n}\mu(d)=[n=1]\),得只有i=n时后面的sigma不是0,也就是等于\(f(n)\)

    现在让我们证明前文提到的这个式子\(\phi(n)=\sum_{d|n} \mu(d) \frac{n}{d}\)

    先引入一个\(id\)函数,\(id(n)=n\)

    \(\because id(n) = n = \sum_{d|n} \phi(d)\)

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

  • 狄利克雷卷积(Dirichlet Convolution)

    两个数论函数f和g的卷积为\((f ? g)(n)=\sum_{d|n} f(d)g(\frac{n}{d})\) ,后面的括号可以省略不写

    满足交换律,结合律,分配律

    两个积性函数的卷积依然为积性函数

    前面的莫比乌斯反演也可以通过狄利克雷卷积证明

同余Modular Arithmetic

定义

若整数\(a\)与\(b\)除以正整数n的余数相等,则称\(a,b\)模\(n\)同余,记为\(a \equiv b \pmod n\)

"For a positive integer n, two numbers a and b are said to be congruent modulo n, if their difference a-b is an integer multiple of n(that is , if there is an integer \(k\) such that a-b = kn),and is denoted \(a \equiv b \pmod (n)\).

The number n is called the modulus of the congruence."

来源:维基百科

费马小定理Fermat‘s Little Theorem

若\(p\)是质数,则对任意正整数\(a\),有\(a^p \equiv a \pmod p\)

欧拉定理Euler Theorem

原文地址:https://www.cnblogs.com/Rye-Catcher/p/10847143.html

时间: 2024-10-31 01:40:56

数学知识小结#1的相关文章

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

canvas绘图数学知识总结

题外话: 最近看了一本书叫 <HTML5 Canvas核心技术 图形.动画与游戏开发>已经算是看了85%,基本接近尾声,所以近期会多总结一些关于canvas的东西, 这本书讲的还算可以,最大的障碍就是一些数学知识和理论的应用,第八章的碰撞检测比较难理解,看这部分的时候,我感觉非常吃力,向量运算是主要技术点, 我这本书是以阅读源码为主的,有兴趣的朋友可以看看,大家交流一下. 三角函数 canvas中所有和角有关的api 都是用的弧度 js api 如 Math.sin(),Math.cos,Ma

awk基础知识小结(2)

10.循环结构循环结构awk 的 while 循环结构,它等同于相应的 C 语言 while 循环.awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值.它类似于其它语言中的 "repeat...until" 循环.示例:do...while 示例 {     count=1     do {    print "I get printed at least once no matter w

C/C++ 位域知识小结

C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存对齐原则 本文主要对位域相关知识进行了一下梳理,参考如下: C语言中的位域 史上最全的C位域总结2 C结构体之位域(位段) C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目. 位域的作用主要是节省内存资源,使数据结构更紧凑. 1. 一

suid知识小结

1.1.1 suid知识小结:针对命令和二进制程序 1)用户或属主对应的前三位权限的x位上如果有s就表示suid权限.当x位上没有小写x执行权限的时候,suid的权限显示的就是大S. 2)suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等.(注意和su及sudo的区别),suid为某个命令设置特殊权限(使用者为所有人).通过给rm命令设置suid加深学生对suid的理解. 3)问题:希望oldboy

ACM数学知识体系

#include<iostream> #include<string> #include<stack> using namespace std; #define n 8 stack <int *> s; int * createMaze(){//初始化迷宫 int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=-1;//不设置为0的原因是超

编程需要知道多少数学知识?

数学和编程有一种容易让人误解的联系.许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高.但一个人为了编程的话,需要学习多少数学呢? ([伯乐在线编注]:本文仅为 Al Sweigart 一家之言,再推荐 Alan Skorkin 的这篇文章<数学是成就卓越开发人员的必备技能>.) 实际上不需要很多.这篇文章中我会深入探讨编程中所需要的数学知识.你可能已经都知道了. 对于基本的编程,你需要知道下面的: 加减乘除 - 实际上,电脑会帮你作加减乘除运算.你仅需要知道什么时候运用它们. 模运

javascript之正则表达式基础知识小结

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

【Cocos2D学习】Lua——数学知识的基本应用

学习Cocox,真的是相当麻烦,IDE的支持太差了,Cocox的各种版本也是多种多样,我先研究的是用Lua语言开发,但是学习起来还是蛮有趣的,我喜欢这种学习.下面基本的数学知识在Cocox的几种应用: 1.跳动的小球(向量的应用) local direction=cc.p(math.random(-1,1),math.random(-1,1)) cc.pNormalize(direction) local dot=display.newDrawNode():addTo(self):center(