結果
| 問題 |
No.16 累乗の加算
|
| ユーザー |
|
| 提出日時 | 2022-06-18 08:36:11 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,062 bytes |
| コンパイル時間 | 379 ms |
| コンパイル使用メモリ | 81,944 KB |
| 実行使用メモリ | 82,276 KB |
| 最終ジャッジ日時 | 2024-10-09 19:24:50 |
| 合計ジャッジ時間 | 3,622 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 14 |
ソースコード
import math
import unittest
def repeated_squaring_sum(x, A, p):
"""(x^A1 + x^A2 ... + x^An) mod p を求める"""
a_max = int(math.log2(max(A))) + 1
cache = [1, x]
i = 2
while i <= a_max:
cache.append((cache[i - 1] ** 2) % p)
i += 1
total = 0
for a in A:
b = format(a, "b")
sq = 1
for i in range(len(b)):
if b[i] == "1":
sq = sq * cache[len(b) - i] % p
total += sq
return total
class RepeatedSquaringTest(unittest.TestCase):
def test_1(self):
self.assertEqual(14, repeated_squaring_sum(2, [1, 2, 3]))
self.assertEqual(253110, repeated_squaring_sum(2, [0, 100]))
def main():
import sys
MOD = 1000003
if len(sys.argv) > 2:
x = int(sys.argv[1])
A = [int(e) for e in sys.argv[2:]]
print(f"x: {x}, A: {A}", file=sys.stderr)
else:
x, N = map(int, input().split())
A = [int(e) for e in input()]
print(repeated_squaring_sum(x, A, MOD))
if __name__ == "__main__":
main()