欧几里得

正睿金华Day6数论&杂题选讲

Deadly 提交于 2019-11-27 03:13:39
<前言> 好久没写博客了,从Day5开始,那么我就从Day6开始补吧。 等等让我找找day6讲什么的、。。。 偶,是任轩笛讲的,上午讲数论和数论函数,下午杂题选讲。 <正文> 质因数 一开始讲的是质因数的素性测试、质因子分解之类的,听着还挺正常。讲到线性筛的时候感觉还行,就去上了个厕所回来。 素性测试: 试除法,配合质数筛法可以 O ( n ) O(\sqrt n) O ( n ​ ) 解决 这个只要筛出 n \sqrt n n ​ 之内的素数。然后一直试除,能除就除,只要能出就不是素数 Miller-Rabin素性测试, O ( l o g n ) O(log\ n) O ( l o g n ) 完成但可能错误。 这个我没听啊,但大致讲一下吧。 基本原理是费马小定理:若 p 是质数,a, p 互质,则 a p − 1 ≡ 1 ( &VeryThinSpace; m o d &VeryThinSpace; p ) a^{p-1} \equiv 1(\bmod\ p) a p − 1 ≡ 1 ( m o d p ) 于是对于某个 p,若能找到与它互质的 a 使得 a p − 1 ≠ 1 ( m o d p ) a^{p-1} \neq 1(mod\ p) a p − 1 ̸ ​ = 1 ( m o d p ) ,则p不是质数。 然而有一些合数 p,满足所有与它互质的 a 都有 a p

扩展欧几里得算法

丶灬走出姿态 提交于 2019-11-26 17:53:30
拓展欧几里得算法 先来看看一个重要的基本定理 裴蜀定理 对于整数a,b,他们关于x,y的线性不定方程 \(ax+by=d\) ,设 \(gcd(a,b)=g\) ,则可证明 \(g|d\) ,换句话说,就是 g是a,b的最小线性组合 。 证明: 设 \(ax+by=d\) , \(g=gcd(a,b)\) ,设 \(ax+by\) 的最小值为s, \(\because\) \(g|a,g|b\) \(\therefore\) \(g|d\) , \(g|s\) 设 \(q=[\frac{a}{s}].则r= a\mod s=a-q*s=a-q*(ax+by)=a(1-qx)+b(-qy)\) 。 可见r也是x,y的线性组合,又r是s的余数, \(r\in [0,s-1]\) ,又s是最小线性组合, \(\therefore r=0\) 。 推出 \(s|a\) ,同理有 \(s|b\) ,则 \(s|g\) ,又已经有 \(g|s\) ,所以 \(g=s\) 。可知g是ax+by的最小线性组合。 推论: a和b互质的充要条件是存在x,y使 \(ax+by=1\) ,因为由上面的证明结论知道d(这里是1)一定是gcd(a,b)的倍数。 其实还可以推广到一堆数互质(这些数的gcd为1)的情况。 拓展欧几里得 我们知道,一般的 欧几里得算法是来求两个数的最大公因数的

扩展欧几里得学习笔记

ぐ巨炮叔叔 提交于 2019-11-26 13:44:27
最近写题的时候经常遇到一些数论题,似乎是扩欧又似乎不是,为了加深自己的印象并且整理一下以前模糊的思路,就写下这篇笔记。 感谢巨巨的博客:https://www.cnblogs.com/KatouKatou/p/9818175.html 同时其中部分证明参考了柯召 孙琦编著的《数论讲义》第二版。 欧几里得算法 在讨论扩展欧几里得算法前先厘清一下欧几里得算法,也就是我们常说的 辗转相除法。熟练掌握的人可以跳过,不过如果不知道如何证明的话可以看一下证明过程,说不定会有某种程度上的启发。 用途 辗转相除法的应用范围很单一,就是用来求两个整数的最大公因数的。 过程 假设我们要求的是a和b的最大公因数,设a=b*q1+r1,如果r1!=0,那么我们使a=b,b=r1,那么新的a和b必然也有类似的关系a=b*q2+r2,重复这个操作直到这个算式中的r(a/b的余数)等于0时,那个式子中的b就是原始的a,b两数的最大公因数。配合代码理解一下。 int gcd(int a,int b) { return b?:gcd(b,a%b):a; } 证明 在看过程中可能会有一个疑问:为什么我们可以这样子不断变换a,b的值?这就需要先证明一个先导定理:设a,b,c是三个不全为0的整数,且a=b*q+c ①,其中q是整数,则a与b的最大公因数等于b与c的最大公因数。 为了方便表述,我在这里引用一个符号(a,b