蓝桥杯:Python组再也不怕组合数计数

文章介绍了在解决从n个数中选取m个数的组合问题时,如何利用Python3.8的math库中的comb函数来高效计算,避免暴力求解阶乘导致的时间超时。同时提到了perm函数,并提醒读者注意两个函数的区别。通过蓝桥杯官方的练习系统实例,证明了该函数在蓝桥杯平台的支持情况,但指出其他OJ可能不支持新版本的Python特性。
摘要由CSDN通过智能技术生成

有一类题目是是这样的:要求我们从n个数中选m个,问共有多少种取法。

如果是用C++写的话,要应用到Lucas定理,暴力阶乘会超时。

这里给大家介绍一个Python3.8 math库自带的函数math.comb(n, m) 可以用于解决上述问题

具体用法请参照:Python math.comb() 方法 | 菜鸟教程

可以一并看一下math.perm函数:Python math.perm() 方法 | 菜鸟教程 并注意区分二者的区别。

math.comb(n, m) = C_{n}^{m}

math.perm(n, m) = A_{n}^{m}

我们来看一下蓝桥杯官方是否支持这个函数。

这里选用蓝桥杯练习系统:“组合数取模”这道题,题目链接:“蓝桥杯”练习系统 

Python3代码 

from math import comb

n,m,p = map(int,input().split())
print(comb(n,m) % p)

评测结果  

可以看到蓝桥杯官方是支持这个函数的

注:很多OJ的评测系统的Python版本可能较老,因此不支持这个函数,具体以蓝桥杯官方为准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UCSD.KS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值