結果
問題 | No.2191 一元二次式 mod 奇素数 |
ユーザー |
![]() |
提出日時 | 2022-11-17 12:40:55 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,839 bytes |
コンパイル時間 | 248 ms |
コンパイル使用メモリ | 82,564 KB |
実行使用メモリ | 87,168 KB |
最終ジャッジ日時 | 2024-09-19 01:20:10 |
合計ジャッジ時間 | 4,401 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 WA * 4 |
ソースコード
import itertools as iterimport collections as collimport heapq as hqimport bisect as bisfrom decimal import Decimal as decfrom functools import cmp_to_keyimport mathimport sys#import pypyjit#pypyjit.set_param('max_unroll_recursion=-1')sys.setrecursionlimit(10 ** 6)inp = sys.stdin.readlineinput = lambda : inp().rstrip()getN = lambda : int(inp())getNs = lambda : map(int, inp().split())getList = lambda :list(map(int, inp().split()))getStrs = lambda n : [input() for _ in [0] * n]def yexit(): print("Yes"); exit(0)def nexit(): print("No"); exit(0)pi = 3.141592653589793mod = 1000000007MOD = 998244353INF = 4611686018427387903dx = [1, 0, -1, 0]; dy = [0, 1, 0, -1]#di = coll.defaultdict(int)# Tonelli-Shanks's Algorithmimport randomclass TonelliShanks:def __init__(self, a, p):self.a = aself.p = pself.x = self.tonelli_shanks()def get_inv(self, _a, _p):return pow(_a, _p - 2, _p)def euler_criterion(self, _a, _p):return (pow(_a, (_p - 1) >> 1, _p) == 1)# x^2 \equiv a (mod p) -> xdef tonelli_shanks(self) :self.a %= self.pif(self.a == 0):return 0if(self.p == 2):return self.aif not(self.euler_criterion(self.a, self.p)):return -1b = 1while(self.euler_criterion(b, self.p)):b = random.randint(1, self.p - 1)q = self.p - 1r = 0while not(q & 1):r += 1q >>= 1x = pow(self.a, (q + 1) >> 1, self.p)b = pow(b, q, self.p)s = 2while(pow(x, 2, self.p) != self.a):e = self.get_inv(self.a, self.p) * pow(x, 2, self.p) % self.pif(pow(e, 1 << (r - s), p) != 1):x *= bx %= self.pb = pow(b, 2, self.p) % self.ps += 1return x"""Main Code"""p = getN()K = (p - 1) >> 1a = p - abs(-4 * K * K - 16 * K + 1) % px = TonelliShanks(a, p).xif(x == -1 or (x & 1) == 0):print("NO")else:print("YES")