トピックへのリンク:https://ac.nowcoder.com/acm/contest/889/B
効果の件名:
B、Cは、あなたがX、Y、xを求めるとyは(X + Y)を満たすことができます%、P = Cと(のx * yを)は%p = Cを考えます。
レポートの問題解決:
被験者の2つの式は、わずか$(X-Y)を算出する必要がある、$(XY)に^ {2} =(X + Y)^ {2} -4xy $を回転させることができる^ {2} = B ^ {2} - 図4c(モッズP)$残留二次
残りの二次判定するNかMOD P、基準はオイラーであってもよいです。判定スタンプのオイラーの基準をここに。
それからちょうど最初の点pを満たすためにあなたは直接、最後は方程式の解である、最初の点を設定することができますので、Tonelli_shanksアルゴリズムを発見。残りの溶液系二スタンプこちら。
ACコード:
1の#include <ビット/ STDC ++ H> 2 の#define numm CH-48 3 の#defineのPdのputchar( ' ') 4 の#defineのPNのputchar('の\ n') 5 使用 名前空間STDを、 6テンプレート<型名T> 7 ボイド(T&読み取りRES){ 8 ブールフラグ= 偽。char型のCH; 9 一方(isdigit(CH = GETCHAR())!)(CH == ' - ')&&(フラグ= 真)。 10 のための isdigit(CH = GETCHAR());(RES = nummのRES =(RES << 1)+(RES <<3)+ numm)。 11 フラグ&&(RESの= - RES)。 12 } 13テンプレート<型名T> 14 ボイドライト(T X){ 15 であれば(X < 0)のputchar(' - ')、X = - X。 16 であれば(X> 9)書き込み(X / 10 )。 17 のputchar(Xの%10 + ' 0 ' )。 18 } 19のtypedef 長い 長LL。 20 のconst int型 MOD = 1E9 + 7; 21 CONST INT INV2 = 500000004 。 22 (LLのB LL)のLL KSM { 23 LL ANS = 1 。 24 一方、(B){ 25 であれば(B&1)ANS = ANS *%のMOD。 26 B >> = 1 。 27 = *%のMOD。 28 } 29の リターンANS。 30 } 31 のint main()の 32 { 33 INT _。 34 リード(_)。 35 しばらく(_-- ){ 36 LL B、C、 37 リード(B)、リード(C); 38である LL DRは=((B * B- 。4 * C)+ MOD%MOD)MOD%; /// 右式 39 IF(KSM(DR、(mod- 1)/ 2)== mod- 1。){ /// オイラーの基準が平方剰余のDRか否かが判断される 40 ライト( - 1。 )(- 、PDは、書き込み1。 )。PN; 41であり 続け、 42である } 43である LL = R&LT KSM(DR、(+ MOD 1)/ 4。); /// 溶液 44 LL F1 =((BR)%MOD + MOD)%のMOD、F2 =(MOD + MOD(B + R)%)%MOD。 45 F1 = F1 * INV2の%のMOD、F2 = F2 * INV2の%のMOD。 46 PN;書き込み(分(F1、F2))、PDは、(MAX(F1、F2))を書きます。 47 } 48 リターン 0 。 49 }