算数基本定理:

1.整数及其相关

2.唯一分解定理

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

其中P1<P2<...<Pk,a1,a2,...,ak>=1;

证:

存在性:

若存在最小的N不满足条件,当N为质数是,显然不成立;当N为合数时,存在P,使得N=P*(N/P),N/P<N,与假设N为最小的矛盾,故一定存在;

即:假设N为最小的

当N为质数直接gg

当N为合数还是gg

故不存在...

唯一性:

假设N的分解不唯一

设存在最小的N,使得N=p1r1 p2r2  .... pkrk且N=q1t1  q2t2 .....qntn

则p1|q1t1  q2t2 .....qntn

假设p1=q1,且r1>=t1,那么两个式子同时除以p1t1

有p1r1-t1.....=q10  .....

而经过变换后的式子要小于原式

这与假设N为最小的不满足的矛盾

(A是一个<=n的正整数     两个条件至少有一个成立)

素数的判定

下面来讲点OI的东西

这是一个现有的最快的确定性的判断质数的方法

其实就是弱智筛啊

还有另外一种不是百分百的算法,但是更快

Miller-rabin素性测试

如果n为素数,取a<n,设n-1=d*2r,则要么ad≡1(mod n)要么存在0<=i<r,使得ad*2^t≡-1(mod n),要么存在0<=i<r,使得ad*2^t≡-1(mod n)(有可能都满足)

对于任意一个a,如果满足这两个条件,n有可能是质数,但a如果不满足这两个条件中的任何一个,它一定不是质数。找k个a,如果都满足这两个条件,k-1个“更”有可能是质数

在选取k的时候,最好选取2,3,5,7,13,29,37,89至少保证int范围内不会出错

因为筛法的不确定性来自于随机的a,但是当选取的数足够好,就没有问题;

如果n是素数,取a<n,舍n-1=d*2r,则要么ad≡1(mod n),要么存在0<=i<r,使得a

部分代码:

int gg[]={,,,,,,,};

long long kuaisumi(long long a,long long b1,long long c)
{
long long i=a;
while(b1)
{
if(b1&)
{
s=(s*i)%c;
}
i=(i*i)%c;
b1>>=;
}
return s%c;
} bool miller_rabin(int a,int n)
{
int d=n-,r=;
while(d%==)
d/=,r++;
int x=kuaisumi(a,d,n);
if(x==)return true;
for(int i=;i<r;i++)
{
if(x==n-)return true ;
x=(long long )x*x%n;
}
return false;//可以对照素性测试看
} bool is_prime (int n)
{
if(n<=)return false ;
for(int a=;a<;a++)
if(n==gg[a])return true;//一个个试
for(int a=;a<;a++)
if(!miller_rabin(gg[a],n))return false;
return true;
}

最大公因数和最小公倍数

3,最大公因数

Gcd(a,b)=max{x(x|a,x|b)}

欧几里得算法的核心思想

gcd(a,b)=gcd(b,a-b)==>gcd(a,b)=gcd(b,a%b)

现在证明gcd(a,b)=gcd(b,a-b)

d=gcd(a,b)   =>a=dx  b=dy;

a-b=d(x-y);

“任意”:∀;“存在”:∃

对于gcd(b,a-b),∃ t>1,t|y,t|x-y;

t>1,t|y,t|x-y  =>t|x,t|y  =>td|a   td|b

裴蜀定理

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

来证一下

不妨使用唯一分解定理

充分性:

d=gcd(a,b),

则d|a,d|b==>d|ax+by=c==>d|c充分性证毕

必要性:

设d=gcd(a,b),s=min(ax+by),s>0

a/s=q......r(0<=r<s)==>r=a-qs=a-q(ax+by)=(1-qx)a-qyb

因为s=min(ax+by),所以r=0==>s|a&&s|b==>

1-------s|gcd(a,b)

s=ax+by=b(nd)+y(md)==>

2-------d|s

综合1,2,得到s=d

证毕

一个应用

请证明:设p为质数,若p|ab,则p|a或p|b

证:

当p|a时,显然成立

否则,gcd(p,a)=1==>xp+ya=1

b=b*1=b(xp+ya)=pxb+yab

p|pxb==>p|yab

在做了这么多铺垫之后,我们终于要开始学习同余的有关知识了,

扩展欧几里得(辗转相除法)

目的:求ax+by=gcd(a,b)的一组解(x,y)

递归求解即可

int Exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = ;
y = ;
return a;
}
int d = Exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - (a / b) * y;
return d;
}

注意:

每一次返回的是三个值,x,y用取地址符

中国剩余定理

Ans=所有逆元加起来%P

这是一个特殊情况

当有k个方程式的时候,就可以按照这个方法来两两合并

以上是正常做法,下面是长者的神奇方法

大数翻倍法

其实就是小学学习的求最小公倍数的方法,让较大的数遍历1~n进行乘法运算,直到较大数和较小数有最小公倍数时有解

这个方法解数学的时候还行,但是OI不好用

逆元及其相关

1.欧拉定理

设x1,x2,.....,xk,k=φ(n)为1~n中k个与n互质的数

结论一:axi与axj不同余

结论二:gcd(axi,n)=1

结论三:x1,x2,...,xk和ax1,ax2,...,axk一一对应

结论四:aφ(n)≡1(mod n)

计算:φ(m)=m*(1-1/p1)*......*(1-1/pi)

Back to here

请证明:如果n为素数,取a<n,设n-1=d*2r,则要么ad≡1(mod n)要么存在0<=i<r,使得ad*2^t≡-1(mod n),要么存在0<=i<r,使得ad*2^t≡-1(mod n)

证:由费马小定理得an-1≡1(mod n),已知n-1=d*2r

∴ad*2^r≡1(mod n)

∴ad*2^r-1≡0(mod n)

由平方差公式知:(ad*2^(r-1))(ad*2^(r-1))≡0(mod n)

∴原式=(ad-1)(ad+1)(ad*2+1)(ad*2^2).......(ad*2^(r-1)+1≡0(mod n)

2.线性求逆元

求1~n所有数 对p的逆元(p为质数)

为了减少时间,我们要尽量利用已经求出来的逆元进行计算,也就是说,当求i的逆元时,1~i-1的逆元已经求完了

设1<=i<=n

∵p/i=k......r

∴p=ik+r

ik+r≡0 (mod p)

kr-1+i-1≡0 (mod p)

i-1≡-kr-1 (mod p)

下面是证明

3.BSGS算法(baby-step  gaint-step)但是我还是觉得北上广深更好

一道非常BT的题目

首先我们想到枚举,从1~phi(m)枚举即可得解,

所谓BSGS其实就是对暴力进行一个优化

先暴力出第一行的sqrt(m)个数

然后从第二行找答案等价于第一行里面是否存在

再从第三行找答案等价于

这样每一行就都能求解了

代码实现

i-1行*size个数+1

数论函数:喂正整数吐整数

积性函数

积性函数:当gcd(a,b)=1时,ƒ(ab)=ƒ(a)ƒ(b)

完全积性函数:ƒ(ab)=f(a)f(b)

积性函数包括:

不变函数:ƒ(n)=n

欧拉函数:ƒ(n)=φ(n)

莫比乌斯函数:ƒ(n)=μ(n)

因子数目总数:ƒ(n)=d(n)

因子之和函数:ƒ(n)=σ(n)

证一下phi(ab)=phi(a)*phi(b);

因子数τ=(r1+1)*(r2+1)*........*(r...+1)

莫比乌斯函数μ

其实就是

枚举n所有的因子的莫比乌斯函数的值的和

代码实现方面,利用埃氏筛或者线性筛来提高速度

该死的莫比乌斯反演

清北学堂Day2的更多相关文章

  1. 清明培训 清北学堂 DAY2

    今天是钟皓曦老师的讲授~~ 总结了一下今天的内容: 数论!!! 1.整除性 2.质数 定义: 性质:  3.整数分解定理——算数基本定理 证明: 存在性: 设N是最小不满足唯一分解定理的整数 (1)  ...

  2. 五一培训 清北学堂 DAY2

    今天还是冯哲老师的讲授~~ 今日内容:简单数据结构(没看出来简单qaq) 1.搜索二叉树 前置技能 一道入门题在初学OI的时候,总会遇到这么一道题.给出N次操作,每次加入一个数,或者询问当前所有数的最 ...

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

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

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

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

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

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

  6. 清明培训 清北学堂 DAY1

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

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

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

  8. 清北学堂学习总结day2

    今天是钟皓曦大佬讲课,先来膜一波   %%%%% •数论 数论是这次培训的一个重点,那么什么是数论呢? 数论是研究整数性质的东西,所以理论上day2不会涉及小数QwQ (切入正题) •整除性: 设a, ...

  9. 【模板】KMP [2017年5月计划 清北学堂51精英班Day2]

    Day2就搞一个KMP把  马拉车.AC自动机等准备省选的时候再说.. 模板题: 1204 寻找子串位置 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze     ...

随机推荐

  1. C++ 虹软人脸识别 ArcFace 2.0 Demo

    环境配置: 开发环境:Win10 + VS 2013 SDK版本:ArcFace v2.0 OpenCV版本:2.4.9 平台配置: x64.x86下Release.Debug SDK 下载地址:戳这 ...

  2. linux(centos7) 常用命令和快捷键 持续验证更新中...

    1.文件和目录cd 进入目录示例:cd /home 进入home目录    cd..    返回上一级目录cd../..    返回上两级目录cd -    返回上次所在目录cd ~    返回根目录 ...

  3. UE3客户端加入DS过程

    拉起DS进程 客户端将比赛地图及相关参数发送给ZoneSvr请求开赛,收到消息后,ZoneSvr会分配一个ip和端口号,并与客户端发过来的地图及其他参数,来构建一个命令行来拉起一个DS进程, DS启动 ...

  4. 从0开始的Python学习008变量

    局部变量 在我们定义函数的过程中,函数内外具有相同名称的变量是没有任何关系的.变量的名称对于函数来说是局部的,而它所在的代码块就是它的作用域. 使用局部变量 #局部变量 def func(x): pr ...

  5. 前后端分离djangorestframework——ContentType组件表

    ContentType ContentType其实django自带的,但是平时的话很少会用到,所以还是放在Djangorestframework这个部分 作用: 在实际的开发中,由于数据库量级大,所以 ...

  6. 【Intellij idea】spring中@Autowired注入失败

    @Autowired注入失败失败的解决办法? 现有的解决的方案是: 打开file-settings或者ctrl+alt+s -> Editor 然后在Inspections 点击搜索栏 输入Sp ...

  7. python3 shell 中添加清屏

    在windows中: 安装目录 \Lib(  D:\Python37\Lib) 中添加 ClearWindow.py 文件,文件内容: """ Clear Window ...

  8. Linux下的快速配置虚拟环境virtualenvwrapper

    一 安装包 pip3 install virtualenv virtualenvwrapper 二 设置linux的用户个人配置文件~/.bashrc WORKON_HOME=~/Envs 设置vir ...

  9. idea spring-boot总结

    1. 按自己重新配置spring-boot pom点进 mybatis-spring-boot-starter ,在要改的里面 <version>3.4.4</version> ...

  10. 使用idea搭建Scala 项目

    主要内容 Intellij IDEA开发环境简介 Intellij IDEA Scala开发环境搭建 Intellij IDEA常见问题及解决方案 Intellij IDEA常用快捷键 1. Inte ...