程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> zoj3609 Modular Inverse(擴展歐幾裡德算法)

zoj3609 Modular Inverse(擴展歐幾裡德算法)

編輯:關於C++
Modular Inverse

Time Limit: 2 Seconds Memory Limit: 65536 KB

The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1x (mod m). This is equivalent to ax≡1 (mod m).

Input

There are multiple test cases. The first line of input is an integer T ≈ 2000 indicating the number of test cases.

Each test case contains two integers 0 < a ≤ 1000 and 0 < m ≤ 1000.

Output

For each test case, output the smallest positive x. If such x doesn't exist, output Not Exist.

Sample Input

3
3 11
4 12
5 13

Sample Output

4
Not Exist
8

題意:已知a,m求最小的x滿足ax≡1(mod m)。
分析:擴展歐幾裡德的模板題,不多說。


#include  #include  #include  #include  #include  #include#include  #include  #include  #include  using namespace std; const double eps = 1e-6; const double pi = acos(-1.0); const int INF = 0x3f3f3f3f; const int MOD = 1000000007; #define ll long long #define CL(a) memset(a,0,sizeof(a)) void exgcd(int a, int b, int &d, int &x, int &y) { if (!b){d=a; x=1; y=0;} else { exgcd(b, a%b, d, y, x); y-=x*(a/b); } } int main() { int a,m,T; cin>>T; while (T--) { cin>>a>>m; int d,x,y; exgcd(a, m, d, x, y); if (d==1)//如果余數為1 { while (x<=0) x+=m;//結果可能為負數 cout<

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved