栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

洛谷1591-n的阶乘中某数出现的次数-python-(高精度乘法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

洛谷1591-n的阶乘中某数出现的次数-python-(高精度乘法)

这个题用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 ans
def 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 flag

def 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号