数论算法总结

目录

一.欧拉函数

二.指数循环节

三.欧拉定理(费马小定理)

四.二次探测定理

五.威尔逊定理

六.Miller-Rabin素性测试

七.二元一次不定方程

1.结论及证明

2.扩张欧几里得

八.乘法逆元

九.拉格朗日插值法

十.中国剩余定理(CRT)

1.引入

2.证明及结论

十一.高斯消元

十二.组合数

1.公式

2.杨辉三角

2.预处理阶乘法

十三.容斥原理

谢谢


一.欧拉函数

浅显易懂地理解,欧拉函数\phi (n)就是求比n小,且与n互质的数的个数。如\phi (3) = 2,因为1,2与3互质。这个函数十分有用,一定要记住。它的求法是:

n=p_{1}^{w_{1}}*p_{2}^{w_{2}}*p_{3}^{w_{3}}*...*p_{m}^{w_{m}}

\phi(n)=n*(1-\frac{1}{p_{1}})*(1-\frac{1}{p_{2}})*(1-\frac{1}{p_{3}})*...*(1-\frac{1}{p_{m}})

附代码:

int res = n;
for (int i = 2; i * i <= n; i ++){
    if (n % i == 0){
        res = res / i * (i - 1);
        while (n % i == 0)
            n /= i;
    }
}
if (n > 1)
    res = res / n * (n - 1);

二.指数循环节

这个指数循环节主要用于降幂,让你的快速幂变得更快,公式如下:

a^{b}modp=a^{bmod\phi (p)+\phi(p)}modp(b>=\phi(p))一定要注意后面的条件:b>=phi(p)!

对于long long范围内的b就这样求就行了,但对于大整数b要这样求:

char B[100];
int mod;
scanf ("%s %d", B, &mod);
int len = strlen (B);
int b = 0;
for (int i = 0; i < len; i ++)
    b = (b * 10 + B[i] - 48) % phi (mod);//位数从高到低,b是最终的指数,mod是模数

如果有兴趣,我有一道对于提升指数循环节的题目:Calculation

三.欧拉定理(费马小定理)

先给出定理:

欧拉定理:a^{\phi (p)}\equiv 1(mod p) (a,p互质)         费马小定理:a^{p-1}\equiv 1(mod p) (p为质数)

显然,费马小定理就是欧拉定理的特殊情况,所以,我们只用来证明欧拉定理:

证明:

设p的缩系为:b_{1},b_{2},b_{3},...,b_{\phi (p)}

则有:b_{1}*b_{2}*b_{3}*...*b_{\phi (p)}\equiv ab_{1}*ab_{2}*ab_{3}*...*ab_{\phi (p)}\equiv a^{\phi (p)}*b_{1}*b_{2}*b_{3}*...*b_{\phi (p)}(mod p)

再把同余式左右两边一约,就得出定理a^{\phi (p)}\equiv 1(mod p)

四.二次探测定理

二次探测定理:x^{2}\equiv 1(modp) 当且仅当p是奇素数时。

五.威尔逊定理

威尔逊定理:(p-1)!\equiv -1(mod p)等同于(p-1)!\equiv p-1(mod p)(p为素数)

.Miller-Rabin素性测试</

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值