摘要: 在p是素数的情况下,对任意整数x都有xp≡x(mod p),这个定理称为费马小定理。其中如果x无法被p整除,我们有xp-1≡1(mod p)。把这个式子变形后得到a-1≡ap-2(mod p),因此我们可以通过快速幂来求出乘法逆元。快速幂见http://www.cnblogs.com/wls001/... 阅读全文
posted @ 2016-01-25 13:26 wls001 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1定义:满足a*x≡1 (mod b)的x值就是a关于b的乘法逆元。 应用除法求mod 2.求解及证明 其实乘法逆元与a*x+b*y=gcd(a,b)是等价的 证明如下: 我们将方程两边同除以gcd(a,b)得 a1*x+b1*y=1; 其中a1=a/gcd(a,b),b1=b/gcd(a,b). 阅读全文
posted @ 2016-01-25 13:14 wls001 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 我们可以将xn分解成((x2)2)2……其中要做k次平方运算,于是我们可以将n用k来表示n=2k1+2k2+2k3……xn=x2k1x2k2x2k3所以我们只要在依次求x2i的同时进行计算就好了时间复杂度为O(logn)1 while(k>0) 2 {3 if(k&1)ys=ys*a%n;... 阅读全文
posted @ 2016-01-25 12:27 wls001 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 其原理就是先将2-n之内的所有数存在一个数组里,初始化所有数全为素数,然后从2开始寻找,只要标记是素数便将他的所有倍数的标记都改为合数,依次类推。时间复杂度为O(nloglogn)。代码实现1 void prime_table()2 {3 for(int i=2;(LL)i 2 using ... 阅读全文
posted @ 2016-01-25 11:35 wls001 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 欧几里得算法又称辗转相除法,主要用于求两数的最大公约数即gcd(a,b)。 欧几里得算法给出gcd(a,b)=gcd(b,a%b)(a>b) 下面我们给出证明: 首先我们设k为gcd(a,b),则a=km,b=kn。 则a%b=a-c*b=km-c*kn=(m-cn)k gcd(b,a%b)=gcd 阅读全文
posted @ 2016-01-25 11:25 wls001 阅读(199) 评论(0) 推荐(0) 编辑