以上の2019頭の牛オフサマースクールキャンプを(第九のフィールド)B二次方程式(オイラーの基準+平方剰余の溶液)

トピックへのリンク: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 }
ここにコード!

 

おすすめ

転載: www.cnblogs.com/wuliking/p/11366852.html