数学知识3
学习内容
扩展欧几里得算法
这里建议应该在自己的草稿纸上面推算一下
代码复现
#求解ax+by = gcd(a,b)的一组解
#返回g,x,y
def exgcd(a,b):
if b == 0:
return a, 1, 0
g, x2, y2 = exgcd(b, a%b)
x1, y1 = y2, x2 - (a // b) * y2
return g, x1, y1
def Func(a, b, m):
g, x1, y1 = exgcd(a, b)
if m % g != 0:
return None, None, None
x0, y0 = x1 * m // g, y1*m//g
return g, x0, y0
逆元
代码复现
费马小定理
费马小定理(Fermat’s little theorem)是数论中的-一个重要定理,在1636年提出,其内容为:假如p是质数,且gcd(a,p)=1,那么a(p-1)=1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
定理内容简单来说就是:
a^(p-1)=1(mod p)求逆元:
两边同除以a 得到 a^(p-2) =1/a(mod p)
但是在数论,1/a 应该是inv(a)
a^(p-2)≡inv(a)(mod p)所以inv(a)= a^(p-2)(mod p).
得到公式:inv(a)= ^(p-2)(mod p).
使用条件:p是质数,并且gcd(a,p)=1.
例题分析
欧拉函数
欧拉定理
欧拉降幂
例题分析
代码复现
def ksm(a, b, c):
ans = 1%c
while b !=0:
if b % 2 == 1:
ans = ans * a % c
a = a*a%c
b //= 2
return ans
n,m = map(int,input().split())
mod = 1000000007
phi = mod - 1
x = 1
ok = False
for i in range(1, m + 1):
x = x * i
if x >= phi:
x = x % phi
ok = True
if ok:
x += phi
print(ksm(n,x,mod))
感悟
这一章对逆元的了解不深的同学可以去看一下知网的这篇博客:逆元 —— 广义化的倒数,其中提到了很多数学定理我都不是很了解,可能这一章比较需要花时间学习!
蓝桥杯云课学习笔记分享,欢迎大佬们批评指正!
一直在进步就好咯!
by 闻不多