471 字
2 分钟
数论
密码学基础
Euclid欧几里得算法(求最大公因数)
又叫做辗转相除法
如:
int Euclid(int a, int b){ if(b == 0){ return a; } a = a % b; return Euclid(b, a);}
模运算的性质
- 加法:
[(a % n) + (b % n)] % n = (a + b) % n
- 减法:
[(a % n) - (b % n)] % n = (a - b) % n
- 乘法:
[(a % n) * (b % n)] % n = (a * b) % n
若a 与 n 互素:如果(a * b) = (a * c) mod n
,则b = c mod n
,其中等号表示mod n同余
扩展的欧几里得算法
给定两个整数, ,可以表示为的最小正整数等于
素数
- 任意整数,都可以分解为若干个素数的乘积。
费马定理
若p是素数,且a是不能被p整除的正整数,那么:
欧拉函数
欧拉函数:,表示小于n的互素的正整数个数。如,即:1,2,3,7,9
一般:
(n是素数)
欧拉定理
费马定理:
欧拉函数:(n为素数)
将费马定理和欧拉函数可得:
素性测试 Miller-Rabin算法
奇整数分解公式:如果,且是奇数
模的乘法公式:
由欧拉定理:
从而所有的的乘积 都为1,即:
因此:如果n是素数,那么遍历这些数,只要有mod n不为1,就是合数。