欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

洛谷1591-n的阶乘中某数出现的次数-python-

时间:2023-08-17

这个题用python写,全部超时
我们为了得到1000!的位数,可以通过如下计算:
我们不妨设1000!的位数为k位,我们可以知道10^(k-1)< 1000!< 10 ^(k),两边取log10,可以计算出k的范围

import math#计算位数 大概2600位def count(n): ans=0 for i in range(1,n+1): ans+=math.log(i,10) return ansdef highMult(n,a): ans=[0]*2600 ans[0]=1 for i in range(1,n+1): ans=mult(ans,i) length=2599 while ans[length]==0: length-=1 flag=0 for an in ans[0:length+1]: if an==a: flag+=1 return flagdef mult(ans,i): num=[] result=[0]*2600 while i>0: temp=i%10 num.append(temp) i//=10 for i in range(2570): for j in range(len(num)): result[i+j]+=ans[i]*num[j] result[i+j+1]+=result[i+j]//10 result[i+j]=result[i+j]%10 return result.copy()if __name__=="__main__": t=int(input()) while t>0: n,a=map(int,input().split()) print(highMult(n,a)) t-=1

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。