总结——数论

一 素数相关

1.唯一分解定理:每个正整数都可以唯一地表示成素数的乘积。

2.素数筛法:求1-n中所有的素数

3.素数测试 Miller-Rabin测试:判断一个数是否几乎肯定是素数

4.质因数分解

 1 int a[100];
 2 void divide(int n){
 3     int m=sqrt(n+1);
 4     for(int i=2;i<=m;i++){    
 5         while(n%i==0){    
 6             a[c++]=i;
 7             n/=i;
 8         }    
 9     }   
10     if (n>1) a[c++]=n;    
11 }
12 
13 质因数分解
质因数分解

5.欧几里得算法(辗转相除法) gcd(a,b)=gcd(b,a mod b)

 1 //递归
 2 int gcd(int a,int b){
 3     return b==0?a:gcd(b,a%b);        
 4 }
 5 
 6 //迭代
 7 int Gcd(int a, int b){
 8     while(b != 0){
 9       int r = b;
10       b = a % b;
11       a = r;
12     }
13     return a;
14 }
欧几里得算法

6.扩展欧几里得算法

1 void exgcd(int a,int b,int & d,int & x,int & y){
2     if (b==0) {x=1;y=0;d=a;return;}
3     exgcd(b,a%b,d,y,x);
4     y-=x*(a/b);
5 }
扩展欧几里得算法

 

二 同余模算数

1.费马小定理:AP≡ (mod P)(P为素数)

2.欧拉定理

3.求逆元扩展欧几里得 ②费马小定理 ③欧拉定理

4.求线性同余方程 ax≡b(mod p):扩展欧几里得

5.求高次同余方程 xk≡n(mod p):BSGS

6.快速幂

 

转载于:https://www.cnblogs.com/travelller/p/8340307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值