結果
| 問題 |
No.8030 ミラー・ラビン素数判定法のテスト
|
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2017-11-05 14:51:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 3,951 ms / 9,973 ms |
| コード長 | 1,066 bytes |
| コンパイル時間 | 341 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 78,976 KB |
| 最終ジャッジ日時 | 2024-11-16 23:05:12 |
| 合計ジャッジ時間 | 9,909 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#!/usr/bin/env python3
import math
import random
def is_prime_miller_rabin(n, k=50):
"""Determing whether the given integer is prime by the Miller-Rabin test.
:param int n: The integer to be checked.
:param int k: The parameter representing the accuracy of the determination.
:return: Whether n is prime or not.
:rtype: bool
"""
assert n > 0
if n == 2:
return True
elif n == 1 or n % 2 == 0:
return False
d = n - 1
s = 0
while d % 2 == 0:
d //= 2
s += 1
for i in range(k):
a = random.randint(1, n - 1)
if pow(a, d, n) != 1:
for r in range(0, s):
if pow(a, d * 2 ** r, n) == n - 1:
break
else:
return False
return True
def solve(xs):
return ((x, int(is_prime_miller_rabin(x))) for x in xs)
def main():
n = int(input())
xs = (int(input()) for _ in range(n))
print(*("{} {}".format(r1, r2) for r1, r2 in solve(xs)), sep="\n")
if __name__ == '__main__':
main()
はむ吉🐹