码迷,mamicode.com
首页 > 其他好文 > 详细

A/B 扩展gcd(或逆元)

时间:2015-05-07 23:53:18      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:

                                A/B

题目抽象:给出n,B.  n=A%9973,gcd(B,9973)=1.     求(A/B)%9973.思路:A是未给出的量,需要用其他量来表示它。设A/B=x,即A=B*x;   y=A/9973.

n=A-A/9973*9973=B*x-9973*y=n;(**) 。

gcd(B,9973)=1=B*x1+9973*y1;(*)

将(*)左右两边乘以n    得到    B*(n*x1)-9973*(-n*y1)=n;只需求出x1就可以了

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 void ex_gcd(int a,int b,int &d,int &x,int &y)
 9 {
10       if(b==0)
11       {
12             x=1;y=0;d=a;
13       }
14       else
15       {
16             ex_gcd(b,a%b,d,y,x);
17             y-=(a/b)*x;
18       }
19 }
20 
21 int main()
22 {
23       int T,b,n;
24       int x,y,d;
25       scanf("%d",&T);
26       while(T--)
27       {
28             scanf("%d%d",&n,&b);
29             ex_gcd(b,9973,d,x,y);
30             x*=n;               //  x可能为负数
31             printf("%d\n",(x%9973+9973)%9973);
32       }
33       return 0;
34 }

 

A/B 扩展gcd(或逆元)

标签:

原文地址:http://www.cnblogs.com/hutaishi/p/4486408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!