1 条题解
-
0
尝试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
- 上传者