📜  Python 3 中竞争性编程的数学技巧

📅  最后修改于: 2022-05-13 01:55:47.260000             🧑  作者: Mango

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