两段代码只有函数C不同 ,函数C用于计算组合数
其中一个方法利用常规的计算 另一种方法利用python自带的factorial函数来计算
不是说自带的函数运行起来会更快吗?为啥当数据逐渐增大到比较大的时候 后者好久不出结果
前者秒出 !?这到底是为啥
除此之外我试验过,如果单独调用两个函数进行比较,后者比前者快,这也印证了自带函数运行起来会快一些 ,可是放到整段代码里面(一个蓝桥杯题的完整题解),后者显得好差劲?半天没答案!恳请解答
N=int(input())
from math import factorial
def C(n,m):
return int(factorial(n)/(factorial(m)*factorial(n-m)))
def find(j,N):
l,r=2*j,N
while l<=r:
mid=(l+r)//2
if C(mid,j)==N:
print(int(mid*(mid+1)/2)+j+1)
return True
elif C(mid,j)>N:
r=mid-1
else:
l=mid+1
return False
for i in range(16,-1,-1):
if find(i,N):
break
N=int(input())
def C(a,b):#阶乘函数
res=1
i,j=a,1
while j<=b:
res=res*i/j
i-=1
j+=1
return res
def find(j,N):
l,r=2*j,N
while l<=r:#二分模板
mid=(l+r)//2
if C(mid,j)==N:
print(int(mid*(mid+1)/2)+j+1)
return True
elif C(mid,j)>N:
r=mid-1
else:
l=mid+1
return False
for i in range(16,-1,-1):
if find(i,N):
break
自带函数也不一定对于你的问题是最好的实现,没必要纠结,如果觉得你自己的好用,那就用自己写的好了
自带函数确实会运行起来快些。但面对的情况不同,如果求组合数先通过求出各自阶乘再用阶乘来计算最终结果的话会出现很多重复计算的情况,造成资源浪费,而自设的函数C计算方式相当于把很多数据约分了再计算的,所以对于求组合数而言,函数C效率高写