我 对 数论的学习
来源:互联网 发布:最出名的网络作家 编辑:程序博客网 时间:2024/05/21 07:51
数论:
题不在多,在精;
数论里面的东西有很多,我现在在我的这篇博客中 先对我所理解的,还有做题能碰到的做个小总结。
一:欧几里得算法
1:求最大公因数:
ll gcd(ll a,ll b){ return a%b==0?b:gcd(b,a%b);
}他的思想则是利用辗转相除法求。
2:扩展欧几里得
先不看代码本身。
我们先要了解一个问题。就是 对 数字 a,b;
一定存在 x,y;
使得 x*a + y*b = gcd(a,b);
而扩展欧几米得的问题就在于 求这个x,y的值;
当然可以保证求的 x 和 y 的 绝对值是 最小的;
正负还是不好说的。
void exGcd(ll a,ll b,ll &x,ll &y){ if(b==0) { x=1;y=0; return; } exGcd(b,a%b,y,x); y-=a/b*x;}如果说要你求 x 的最小正整数,然而x为负。
那么 你要知道 的就是 b*a - a*b=0;
我让x=x+b;
(x+b)*a + (y-a)*b = gcd(a,b);
给个例子 窜松门
美滋滋。
3:中国剩余定理
这玩意 ,我认为首先要引入一个东西叫做
韩信点兵;
相当于 有N个人
N mod(5)=4;
N mod(3)=2;
N mod(7)=1;
让你求最小。
首先分析问题
除数互质
x ≡ 1 (mod 3) x ≡ 0 (mod 3) x ≡ 0 (mod 3)
x ≡ 0 (mod 5) x ≡ 1 (mod 5) x ≡ 0 (mod 5)
x ≡ 0 (mod 7) x ≡ 0 (mod 7) x ≡ 1 (mod 7)
求出x1 x2 x3;
x1 =70 ; x2 = 21 ; x3= 15;
那么有一个解 就一定是 70*2 + 21 *4 +15 *1=140+84+15=239;
我再对 5,3,7 的最小公倍数 取余。
239 mod 105 = 29;
这是一种 思路 ;
说实话 百度上的欧几里得 说的太专业 ,不怎么听得懂。
用这个例子,我觉的应该可以解决 一些问题。
接下来的话,我只需要通过 扩展欧几里得算法来分别求出x1,x2 ,x3;
美滋滋。
4:扩展中国剩余定理
中国剩余定理只是用于解决 除数互质的情况;
如果除数他们有共因子,就GG;
额
这个话题我好像还不是很懂。以后再来补;
给个 题目 窜松门
这是从别人的理解里搞过来的,对于我不是数学系的,我觉得,先存着吧;
好货以后万一有用也是美滋滋。
不过这玩意我还是用题目来记模版比较好。
到时候再发题目链接吧。
二:取模的相关运算
a + b mod c = (a mod c + b mod c)mod c
a- b mod c - > b =-b来理解。
a*b mod c = (a mod c)*(b mod c) mod c;
至于 a/b 情况不同 ;一般来说 我们可以通过求b 关于 mod c 的乘法逆元。
如果你不懂 乘法逆元 ,大兄弟 百度吧。
至于乘法逆元嘛;
这是我wa多次才发现需要的东西。
乘法逆元的求法:
1:费马小定理:
额 怎么说呢 如果 a 与 p 互质;那么
a^(p-1) ≡1(mod p)
那么这个有啥子用呢;
我们要求的是乘法逆元;
求的就是
(a^(p-2) * a) mod p ==1
然后用快速幂在搞一下, 就求出了;
2:扩展欧几里得:
a 与 p 互质
那么 x*a mod p*y == 1;
把这个x搞出来就行;
3:欧拉函数 :
这个就是 a 与 p 不互质的时候 所要利用的知识点;
不会;先存着以后变聪明了再来看;
三:组合数
写的不好看,凑合凑和,在n个东西中 选m个东西出来。
一般来说 解法就是 n!/(m! * (n-m)!);
小心别数据爆就行;
但是 啊;
我们要提前对n!
进行预处理的是吧;
n<1000000; 还好讲的是吧;
太大了怎么搞;
就需要一个定理 叫做,卢卡斯定理
骚不骚,必须骚;
代码实现:
int Lucas (ll n , ll m , int p) { return m == 0 ? 1 : 1ll*comb (n%p , m%p , p) * Lucas (n/p,m/p,p)%p ;}记得吧;
- 我 对 数论的学习
- 我对队列的学习
- 我对栈的学习
- 我对学习数据结构的一些看法!
- 谈我对计算机学习的理解
- 我对学习数学的感觉
- 我对自己学习的思考
- 我对计算机体系结构学习的理解
- 浅谈我对机器学习的理解
- 我对学习的一点看法
- 浅谈我对机器学习的理解
- 浅谈我对机器学习的理解
- 我对Linux 权限管理的学习
- 我对单向链表的学习
- 我对UiAutomator学习的一些总结
- 我对学习的一些思考
- 浅谈我对机器学习的理解
- 我对LSTM学习的整理--Tensorflow
- 高通平台读写nv总结
- 前端 后端的基本 交互(后端 scala)(一)
- Joomla如何发送一封 简单的&&复杂的 邮件
- 逻辑运算符,位运算符以及三目运算符总结
- Java学习笔记之IO流
- 我 对 数论的学习
- Oculus VR SDK实现-Oculus针对大量显示数据的buffer设计
- Linux 下的 FFmpeg 安装编译环境配置总结
- 微信小程序之你不可不知的调试技巧
- ARKit & OpenGL ES
- 怎样从0开始搭建一个测试框架_3——参数化
- swift3
- js new 发生了什么
- 2017 Multi-University Training Contest