码迷,mamicode.com
首页 > 其他好文 > 详细

数论集合

时间:2019-08-17 20:27:42      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:href   opened   没有   cli   推导   研究   欧几里得   open   a*   

零,前言:
学chty_sqy开个数论集合

学OI的时候以看数论就头大,现在该还了 T_T

建议推导和证明不熟或不会的同学动手推导

而且公式看上去不太清楚,学习的同学请仔细阅读

以前数论怎么都学不会,主要还是浮躁,不仔细看,没有动手 orz

 

一,gcd(欧几里得算法):

两个数a和b的最大公因数被称为gcd(a, b)

求gcd通常用欧几里得算法

原理:gcd(a, b)=gcd(b, a%b)

详情:https://www.cnblogs.com/cdcq/p/11366100.html

代码:

技术图片
1 int gcd(int a,int b){  return b ? gcd(b,a%b) : a;}
一行gcd

 

二,exgcd(扩展欧几里得算法):

数论守门员

有一个或者几个变量的整系数方程,它们的求解仅仅在整数范围内进行。

扩展欧几里得算法研究的是形如 a*x+b*y=c 的丢番图方程的解

方程有解当且仅当gcd(a, b)|c

原理:a*x1+b*y1=gcd(a, b),b*x2+(a%b)*y2=gcd(b, a%b),gcd(a, b)=gcd(b, a%b)  =>  x1=y2,y1=(x2-⌊a/b⌋*y2)

详情:https://www.cnblogs.com/cdcq/p/11366100.html

代码:

技术图片
1 void exgcd(int a,int b,int &x,int &y){
2     if(!b){
3         x=1,y=0;
4         return ;
5     }
6     exgcd(b,a%b,x,y);
7     int z=x;
8     x=y,y=(z-a/b*y);
9 }
View Code

 

数论集合

标签:href   opened   没有   cli   推导   研究   欧几里得   open   a*   

原文地址:https://www.cnblogs.com/cdcq/p/11370008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!