目录
一.欧拉函数
浅显易懂地理解,欧拉函数就是求比n小,且与n互质的数的个数。如
,因为1,2与3互质。这个函数十分有用,一定要记住。它的求法是:
附代码:
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);
二.指数循环节
这个指数循环节主要用于降幂,让你的快速幂变得更快,公式如下:
一定要注意后面的条件: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
三.欧拉定理(费马小定理)
先给出定理:
欧拉定理:(mod p) (a,p互质) 费马小定理:
(mod p) (p为质数)
显然,费马小定理就是欧拉定理的特殊情况,所以,我们只用来证明欧拉定理:
证明:
设p的缩系为:,
则有:(mod p)
再把同余式左右两边一约,就得出定理(mod p)
四.二次探测定理
二次探测定理: 当且仅当p是奇素数时。
五.威尔逊定理
威尔逊定理:等同于
(p为素数)