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

•数论

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

  数论是研究整数性质的东西,所以理论上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. CentOS7.x安装kickstart

    kickstart简介 kickstartkickstart是RedHat公司开源的软件,所以对CentOS兼容性最好,是一种无人值守的安装方式就是将手动安装配置的步骤,记录到文件中,然后通过kick ...

  2. Robust PCA via Outlier Pursuit

    目录 引 主要结果 定理1 定理2 理论证明 构造Oracle Problem 算法 Xu H, Caramanis C, Sanghavi S, et al. Robust PCA via Outl ...

  3. 前端开发 JavaScript 规范文档

    一,规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, 尽可能的减小服务器负载,保 ...

  4. VMware 安装 centos6.8

    参考文档:https://jingyan.baidu.com/article/49711c61964328fa441b7c93.html 准备工作 VMware Workstation Pro 下载地 ...

  5. ansible-playbook(nginx例)

    一.创建目录结构 cd /etc/ansible/roles/ mkdir nginx/{files,templates,vars,handlers,meta,default,tasks} -pv 二 ...

  6. Jmeter二次开发代码(2)

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  7. mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)

    简介 xtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...

  8. vue scoped >>> & git conflict <<<<<<< HEAD

    vue scoped >>> & git conflict <<<<<<< HEAD Q: ???还有这操作 A: > > ...

  9. 基于zookeeper实现分布式锁

    Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件. 特性: 1.节点数据结构,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存 ...

  10. python 所有常用模块汇总

    time:时间 时间戳(timestamp):time.time() 延迟线程的运行:time.sleep(secs) (指定时间戳下的)当前时区时间:time.localtime([secs]) ( ...