• 清北学堂学习总结day2


    今天是钟皓曦大佬讲课,先来膜一波   %%%%%

    •数论

      数论是这次培训的一个重点,那么什么是数论呢?

      数论是研究整数性质的东西,所以理论上day2不会涉及小数QwQ

    (切入正题)

    •整除性:

      设a,b ∈ Z,如果  c ∈ Z 并且 a = b * c,则称 b | a

      称:

        b为a的因子

        b能整除a

        a能被b整除  / /好像很简单的样子

    •质数:

      只有1和自身作为因子的数叫做质数

      以 π(x)表示不超过x的素数个数,可以证明出以下结论(1):

        lim π(x) * ln x / x = 1;

        也就是 lim π(x) =  x / ln x;

        这个结论对于分析算法复杂度有一定帮助;

      结论(2):(欧几里得引理)

        设p为质数,若 p | a * b ,则 p | a 或者 p | b。

        这个结论是一个基础结论,广泛用于以下结论的证明;

    •整数分解定理----算数基本定理:

      对于任意大于1的正整数N,N一定能够分解成有限个质数的乘积和,即:

      N = p1a1 * p2a2 * ...... pkak

      其中p1<p2<......<pk,a1、a2、a3、...... 、ak均为正整数;

      下面给出证明:

        首先证明存在性:

        我们可以用反证法,设N为不满足条件的最小的数,N如果是质数就不符合条件(N1),如果N不是质数还是不符合条件(根据对合数的定义,以及一个叫数学归纳法的玩意儿),证毕;

        再来证明唯一性:

        这里就用到了欧几里得引理,也就是上文所说的 “ 广泛用于以下结论的证明 ” 的结论,我也没有打自己脸

          假设n为不能被分为质数的乘积的自然数之一,且n为最小 

             因为设n为大于1的合数(如果n为质数,则只有n=n,显然这是质数的乘积) 

        因为每个合数都可以分为两个大于1小于它的两自然数的乘积
        所以n=a×b
        又因为n为不能被分为质数的乘积的自然数中最小的一个
        所以a和b可以分为质数的乘积
        所以n已就可以分为质数的乘积,与假设不符合,故假设错误
        存在性得证。 

    •筛素数(这里先不展开讲,有兴趣可以参考我的博文,应该会在一两天内出炉)

    •最大公因数:

      英文缩写:gcd

      它的定义是:gcd ( a , b ) = max { x ( x | a , x | b ) }

      既然讲到了最大公约数,就不得不讲讲欧几里得算法啦,就当是自己复习一下了;

      欧几里得算法的核心思想,就是把gcd(a,b)转化为gcd(b,a % b)

      下面是证明:

        将a的带余除法式写出来:a = k * b + r(其中a,b,k,r皆为正整数,且r<b),则r = a % b

        假设d是a , b的一个公约数,记作d | a,d | b,即a和b均可以被d整除,而r = a - k * b,两边同时除以d,r / d = a / d - k * b / d = m,由等式右边可知m为整数,因此d | r,因此d也是b,a%b的公约数。

        下面再证d是最大的,假设d是b , a % b的公约数, 则d | b , d | ( a - k * b ) , k 是一个整数。进而d | a(结合上面的证明).因此d也是a , b的公约数,因此( a , b )和( b , a % b )的公约数是一样的,其最大公约数也必然相等,得证。

      接下来就是最最激动人心的代码实现啦

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstdlib>
     4 using namespace std;
     5 int gcd(int,int);
     6 int main()
     7 {
     8     int a,b;
     9     scanf("%d%d",&a,&b);
    10     printf("%d",gcd(a,b));
    11     return 0;
    12 }
    13 
    14 int gcd(int a,int b)
    15 {
    16     
    17     if(a<b) return gcd(b,a); //对a<b时的特判;
    18     if(b==0) return a;
    19     else return gcd(b,a%b); 
    20 }

     •裴蜀定理:

      给定a,b,c,则ax + by = c有整数解的充要条件为gcd(a,b) | c

      辣么我们证一下

      根据唯一分解定理,可以很简单的得出,但如果我们不用呢?

      先来证必要性:

        a = a'd , b = b'd

        ax + by = ( a'x + b'y )d = c

        得证!

      接下来是充分性:

        我们可以转化成证明d是最小的能写成ax + by的正整数,设ax + by能表示的最小正整数为s,

      a / s = q……r , r = a - qs = a - q ( ax + by ) = a ( 1 - qx ) + b ( -qy ) , 0<=r<s => r = 0 => s | d

      又因为d | ax + by = ( a'x + b'y )d => d | s

      所以d = s

      那么我们就可以证明欧几里得引理啦:

        若p | a,搞定!

        否则有gcd( p , a ) = 1 , 则  n , m使得np + ma = 1.所以b = b ( np + ma ) = bnp + mba = bnp + mtp

        得证!

    •扩展欧几里得(exgcd)

      详见我的博客

    •中国剩余定理

      详见我的博客

    •逆元

      如果(a,m) = 1且存在唯一的b使得a * b ≡ 1(mod m)且1 ≤ b < m,则b为a在模m意义下的逆元;

      这里再介绍2个结论:

      结论(1):(费马小定理)

        ap-1 ≡ 1

      结论(2):(欧拉定理)

        aΦ(m) ≡ 1

      欧拉定理的证明不再阐述,有兴趣可以参考百度。

    无缝连接

  • 相关阅读:
    Light oj 1197
    UVA 11426 GCD
    Light oj 1236
    Light oj 1138
    Light oj 1214-Large Division (同余定理)
    Light oj 1234
    HDU
    ZOJ 3469 Food Delivery(* 区间DP 总结)
    二分查找整理
    zoj 3965 Binary Tree Restoring(* dfs)
  • 原文地址:https://www.cnblogs.com/juruohqk/p/10673591.html
Copyright © 2020-2023  润新知