#40: python


super7@gm.ocu.edu.tw (賴麒祐)

學校 : 不指定學校
編號 : 1377
來源 : [59.126.209.172]
最後登入時間 :
2024-02-05 21:32:12
a426. 13的計算 | From: [114.46.240.205] | 發表日期 : 2023-10-23 11:11

(01). 算出來的值很大, 因為答案只要求取得 十位數, 所以可以把每次 相乘 13 後 除以 100 取餘數, 再去乘以 13, 可以減少 記憶體容量 和 計算時間

如 13 的 7 次方

原本需要:

1) 13

2) 169

3) 2197

4) 28561

5) 371293

6) 4826809

7) 627485"1"7

但取兩位餘數 再乘以 13:

1) 13

2) 69

3) 97

4) 61

5) 93

6) 9

7) "1"7

最後結果是一樣, 十位數 是 "1", 但是計算速度和記憶體會大大減少

 

(02). n 很大可先拆多組後再計算, (拆 2組, 5組, 10組...), 就會更省時間

如 13 的 23 次方,  正確答案: 417539054134131163670457"9"7,

我們可以拆成 3 組分別計算:

13 ** 23 --> (13 ** 7) * (13 ** 7) * (13 ** 7) * (13 ** 2)

依據上面 (01) 結果, 13 的 7 次方, 答案兩位數為 17

那就 17 * 17 * 17 * (13 ** 2)

等於 4913 * 169 --> 8302"9"7

 

如果再套用 (01) 的觀念, 取兩位數後再 相乘

1) 17

2) 89

3) 13

最後 13 * (13 ** 2) -> 21"9"7

 

(03). 取兩位數後再相乘的作法:

ans = 1

for x in range(xxx):

    ans = ans * 13

    ans = ans % 100

 

(04). 最後答案取 十位數 的作法:

答案除以 100 取餘數, 再 除以 10 取整數 -> print(ans % 100 // 10)

 

 
ZeroJudge Forum