Python 3 中竞争性编程的数学技巧
以下是Python 3.8 为竞争性编程中的程序员提供的一些令人兴奋的特性。这些新特性与一些竞争性程序员经常使用的数学函数和算法有关。这些功能的实现具有与从头开始实现程序相同的时间复杂度。
我们会讨论
- 模幂
- 乘法模逆
- 计算 n Cr和 n Pr
模幂
给定 3 个数字 A、B 和 Mod.Calculate (A B )%Mod。
例子:
Input : A = 4, B = 3 Mod = 11
Output : 9
Explanation: (43)%11 = (64)%11 = 9
Input : A = 3, B = 3 Mod = 5
Output : 2
Explanation: (33)%5 = (27)%5 = 2
这里讨论模幂的传统实现
下面是讨论的Python3.8解决方案
PYTHON
A = 4
B = 3
Mod = 11
# Power function can take 3
# parameters and can compute
# (A ^ B)% Mod
print(f'The power is {pow(A, B, Mod)}')
Python
A = 4
Mod = 11
# Power function can take 3 parameters
# and can compute (A^-1)% Mod
print(f'The Modular Multiplicative Inverse \
of A under Mod is {pow(A, -1, Mod)}')
PYTHON
import math
N = 10
r = 3
print(f"Ncr = {math.comb(N, r)}")
print(f"Npr = {math.perm(N, r)}")
输出:
The power is 9
模乘逆
给定两个整数 A 和 Mod,计算模 Mod 下 A 的模乘逆。
模乘逆是一个整数 B 使得
(A.B)%Mod = 1 where gcd(A, Mod) should be equal to 1
例子:
Input : A = 4, Mod = 11
Output : 3
Explanation: (4*3)%11 = (12)%11 = 1
Input : A = 3, Mod = 5
Output : 2
Explanation: (3*2)%5 = (6)%5 = 1
这里讨论模乘逆的传统实现
下面是讨论的Python3.8解决方案
Python
A = 4
Mod = 11
# Power function can take 3 parameters
# and can compute (A^-1)% Mod
print(f'The Modular Multiplicative Inverse \
of A under Mod is {pow(A, -1, Mod)}')
输出:
The Modular Multiplicative Inverse of A under Mod is 3
计算 Ncr 和 Npr
给定 N 和 r 的值。计算 Ncr(一次取 r 的 N 个事物的组合)和 Npr(一次取 r 的 N 个事物的排列)。
例子:
Input : N = 10, r = 3
Output : Ncr = 120
Input : N = 10, r = 3
Output : Npr = 720
这里和这里讨论了 Ncr 和 Npr 的传统实现
下面是讨论的 Python3.8 解决方案。
PYTHON
import math
N = 10
r = 3
print(f"Ncr = {math.comb(N, r)}")
print(f"Npr = {math.perm(N, r)}")
输出:
Ncr = 120
Npr = 720