結果
| 問題 |
No.8030 ミラー・ラビン素数判定法のテスト
|
| ユーザー |
|
| 提出日時 | 2023-10-04 13:36:19 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 2,477 ms / 9,973 ms |
| コード長 | 773 bytes |
| コンパイル時間 | 223 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 11,392 KB |
| 最終ジャッジ日時 | 2024-07-26 14:45:20 |
| 合計ジャッジ時間 | 7,166 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
import random
def is_prime_miller_rabin(n, k=10):
if n <= 1:
return False
if n <= 3:
return True
# n - 1を (2^r) * d に分解する
r, d = 0, n - 1
while d % 2 == 0:
r += 1
d //= 2
# ミラーラビンテストをk回繰り返す
for _ in range(k):
a = random.randint(2, n - 2)
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(r - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
N = int(input())
for i in range(N):
num = int(input())
if is_prime_miller_rabin(num):
ans = 1
else:
ans = 0
print(num,ans,sep=' ')