1 质数
定义
大于1整数中,如果只包含1和本身,这两个约数,就被称为质数(素数)
质数的判定(试除法)O(sqrt(n))
最大为 n / i
for (int i = 2; i <= n / i; i++) {if (n % i ==0)return false;}
分解质因数(试除法)O(sqrt(n))
for (int i = 2; i <= n / i; i++) {if (n % i ==0) {int s = 0;while (n % i == 0) {n /= i;s++;}System.out.println(i +" "+ s)}}
筛质数
(埃氏筛法) O(nloglogn)
for (int i = 0; i <= n; i++) {if (st[i] != 0) {prime[cnt++] = n;for (int j = i + i;j <= n; j += i) st[j] = ture;}}
线性筛法 
for (int i = 0; i <= n; i++) {if (st[i] != 0) {prime[cnt++] = n;for (int j = 0; primes[i] <= n / i; j += i) {st[primes[j] * i] = true;if (i % primes[j] == 0) break;}}}
2 约数
约数的判定(试除法)
约数的个数
约数之和
最大公约数 O(logn)
欧几里得算法(辗转相除法)
int gcd(int a, int b) {return b ? gcd(b, a % b) : a;}
3 欧拉定理
定义
1~N 中与 N 互质的个数 

for (int i = 2; i <= a / i; i++) {if (a % i == 0) {res = res / i * (i - 1);while (a % i == 0) a /= i;}}if (a > 1) res = res /a * (a -1);
筛法求欧拉函数
求1 - n 中所有的数的欧拉函数
private static long get_eulers(int n) {for (int i = 2; i <= n; i++) {if (st[i] == false) {primes[cnt++] = i;phi[i] = i - 1;}for (int j = 0; primes[j] <= n / i; j++) {st[primes[j] * i] = true;if (i % primes[j] == 0) {phi[primes[j] * i] = phi[i] * primes[j];break;}phi[primes[j] * i] = phi[i] * (primes[j] - 1);}}long res = 0;for (int j = 1; j <= n; j++) {res += phi[j];}return res;}
4 快速幂
快速求出来,
res = 1;while (k != 0) {if (k & 1) res = res * a % p;k >>= 1;a = a * a % p}
5 扩展欧几里得

6 求解线性同余方程



