タスクは次のとおりです。正の整数x
と素数を指定すると、などのn > x
最小の正の整数を出力y
し(y * y) mod n = x
ます。この質問の重要な部分は、ブルートフォースソリューションを除外する、以下で指定される制限時間です。
そのような値がない場合y
、コードは出力されますN
。
テストケース
(2, 5, N),
(3, 5, N),
(4, 5, 2),
(524291, 1048583, N),
(529533, 1048583, N),
(534775, 1048583, 436853),
(540017, 1048583, 73675),
(536870913, 1073741827, 375394238),
(542239622, 1073741827, 267746399),
(547608331, 1073741827, N),
(552977040, 1073741827, 104595351),
(1099511627676, 1099511627791, N),
(1099511627677, 1099511627791, 269691261521),
(1099511627678, 1099511627791, 413834069585),
(1267650600228229401496703204376, 1267650600228229401496703205653, 5312823546347991512233563776),
(1267650600228229401496703204476, 1267650600228229401496703205653, N)
(1267650600228229401496703204576, 1267650600228229401496703205653, N)
(1267650600228229401496703204676, 1267650600228229401496703205653, 79905476259539917812907012931)
入出力
入力を受け取り、便利な方法で出力を行うことができます。出力したくない場合はN
、どのFalsey
値でもかまいません。
制限事項
コードは、標準デスクトップで1分以内にすべてのテストケースに回答する必要があります。この制限時間はブルートフォースの回答を防ぐためだけのものであり、すぐに適切な回答が実行されることを期待しています。この問題を解決したり、数値が2次剰余であるかどうかをテストしたりするライブラリまたはビルトインを使用することはできません。