两段代码只有函数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