1 条题解

  • 0
    @ 2025-4-19 19:33:09

    尝试7次拿下第一AC!


    Python题解:快速幂与对数

    很好的题 ,题目背景除外。。。

    首先,暴力或许有部分分,考试写不出来的可以这样做,但可以告诉你,这里不行:)


    怎么处理N^K这样的大数?

    后三位,要求的是精度,快速幂,记得时时取模

    前三位,要求的是大小,取对数,利用对数性质

    快速幂不说了,每一次乘法后对1000取模求后三位即可

    前三位的处理,要利用对数的性质(不太好理解,建议咨询高中数学老登): log(N^K)=Klog(N),而对于log()的结果,其整数部分代表位数,小数部分作为N的次幂用于解析各位数字,到这里,算法已经明了了 还有,别忘了处理前导零,前三位不需要,但后三位要考虑(多亏有WA反馈,不然我死都想不到)


    代码(奇奇怪怪的前导零处理方式):

    import math
    def last_three(n,k):
        #快速幂
        result=1
        n%=1000
        while k>0:
            if k%2==1:
                result=(result*n)%1000
            n=(n*n)%1000
            k//=2
        return result
    def first_three(n,k):
        # 取对数
        log=k*math.log10(n)
        frac=log-int(log)
        return int(10**(frac+2))    #相当于int((10**frac)*100)
    while True:
        try:
            N,K=map(int,input().split())
            first=str(first_three(N,K))
            last=str(last_three(N,K))
            if len(last)==1:last='00'+last
            if len(last)==2:last='0'+last
            print(first,last)
        except Exception:
            break
    

    信息

    ID
    421
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    7
    已通过
    1
    上传者