一 素数相关
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−1 ≡ 1 (mod P)(P为素数)
2.欧拉定理
4.求线性同余方程 ax≡b(mod p):扩展欧几里得
6.快速幂