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

•数论

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

  数论是研究整数性质的东西,所以理论上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 )的公约数是一样的,其最大公约数也必然相等,得证。

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

 #include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
int gcd(int,int);
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",gcd(a,b));
return ;
} int gcd(int a,int b)
{ if(a<b) return gcd(b,a); //对a<b时的特判;
if(b==) return a;
else return gcd(b,a%b);
}

•裴蜀定理:

  给定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

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

无缝连接

清北学堂学习总结day2的更多相关文章

  1. 清北学堂学习总结 day2 字符串 练习

    1.hash表(哈希表) codevs 2147 数星星--简单哈希  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小明 ...

  2. 清北学堂学习总结day3

    小学知识总结 上午篇 •积性函数的卷积公式 (1)(f * g)( n ) = ∑(d|n) f( d ) x g ( n / d ) (2)代码实现 LL f[N], g[N], h[N]; voi ...

  3. 清北学堂学习总结day1

    上午篇 一.高精度计算: [以下内容先只考虑非负数情况] •高精度加法: 思路:[模拟竖式运算] 注意:[进位] •高精度减法: 思路:[同加法类似,模拟竖式运算,进位变退位] 注意: [结果为负数的 ...

  4. 清北学堂学习总结 day1 数据结构 练习

    1.二叉搜索树 STL set直接做就可以了 2.树状数组+差分数列: codevs 1081 线段树练习 2  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Maste ...

  5. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  6. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  7. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  8. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  9. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

随机推荐

  1. django.db.utils.ProgrammingError: (1146, "Table 'db_gold.user_ip_info' doesn't exist") RuntimeError: Model class scanhosts.models.HostLoginInfo doesn't declare an explicit app_label and isn't in an a

    Error Msg 创建了一个apps的目录将所有app放入apps文件中, 将apps路径加入sys.path中:sys.insert(0, os.path.join(BASE_DIR, " ...

  2. linux下安装多个Tomcat

    编辑环境变量:vi /etc/profile 加入以下代码 ##########first tomcat########### CATALINA_BASE=/usr/local/src/tomcat ...

  3. JDK8中HashMap

    引用别人的一句话: JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多 ...

  4. 【算法】C语言趣味程序设计编程百例精解

    C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...

  5. Django(八)下:Model操作和Form操作、序列化操作

    二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...

  6. 通过后缀名和MIME-TYPE检查实现文件类型校验

    前言 文件上传是一个在开发中很常见的需求场景,通常出于安全考虑,我们会对上传的文件进行类型校验,其中常见的有后缀名校验,mime-type校验 话不多说,直接上代码 1.首先定义允许上传的文件类型白名 ...

  7. Flutter路由导航Navigator

    第一点:push使用 1.pushNamed——Navigator.of(context).pushNamed('routeName'); 此种方法只是简单的将我们需要进入的页面push到栈顶,以此来 ...

  8. mysql join用法简介

    为什么需要join 为什么需要join?join中文意思为连接,连接意味着关联即将一个表和多个表之间关联起来.在处理数据库表的时候,我们经常会发现,需要从多个表中获取信息,将多个表的多个字段数据组装起 ...

  9. 一个解释volatile关键字最好的例子

    小例子 public class VolatileTest { private static volatile int INIT_VALUE = 0; private final static int ...

  10. sts 创建springMVC项目---- maven和tomcat 错误处理

    今天学习spring的时候,学到了springMVC, 因为springMVC 就是beginning spring 书籍的第三章,为了更深入或更简单的起步学习springMVC, 我又找了另外一本书 ...