Problem Description

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973)= 1)。

Input

数据的第一行是一个T,表示有T组数据。

每组数据有两个数n(0 <= n < 9973)和B(1<= B <= 10^9)。

Output

对应每组数据输出(A/B)%9973。

Sample Input

2

1000 53

87 123456789

Sample Output

7922

6060

/*************************

欧几里得算法,又称辗转相除法,用于求最大公约数:  c = gcd(a,b) = gcd(b,a%b);

扩展欧几里得算法:

若a,b不全为0,则存在x,y使得 c = gcd(a,b) = a*x+b*y;

因为 gcd(a,b) = gcd(b,a%b),则有 x*a + y * b = x1 * b + y1 * (a%b),等式右边变形,则得到:b * x1 + (a%b) * y1 = b * x1+(a-a/b*b) * y1 = a * y1+b * (x1 - ( a / b) * y1)。

则  x = y1 , y= x1-(a/b)*y1,然后可由后向前迭代得到 x,y。

1573 A/B:

A%B = 0 可令 x = A / B -> A = B*x;

n = A % 9973 = A - A / 9973 * 9973 :

= B*x - A/9973*9973

= n

可以 令 y = A / 9973;  则 B * x + y * 9973 = n;

因为 gcd(9973,B) = 1,所以不能用exgcd(B,9973,x,y);

B * x1 + 9973 * y1 = 1; -> B * x1 *n + 9973 * y1 * n = n;

红色字体的两个式子比较系数就可以看出 x = x1 * n;

然后求 x % 9973 就OK 了

代码:

#include <iostream>
using namespace std;
int exgcd(int a,int b,int &x,int &y)// 扩展欧几里得函数模板
{
if(b==0)
{
x = 1;y = 0;return a;
}
int d = exgcd(b,a%b,x,y);
int t = x;
x = y;
y = t-a/b*y;
return d;
} int main()
{
int t,n,B,x,y,ans,xx;
cin>>t;
while(t--)
{
cin>>n>>B;
ans = exgcd(B,9973,x,y);
xx = x*n;
ans = (xx%9973+9973)%9973; // 防止 x 为负数
cout<<ans<<endl;
}
}

hdu 1573 A/B (扩展欧几里得)的更多相关文章

  1. 扩展欧几里得 hdu 1576

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 不知道扩展欧几里得的同学可以参考:https://blog.csdn.net/zhjchengf ...

  2. hdu 5512 Pagodas 扩展欧几里得推导+GCD

    题目链接 题意:开始有a,b两点,之后可以按照a-b,a+b的方法生成[1,n]中没有的点,Yuwgna 为先手, Iaka后手.最后不能再生成点的一方输: (1 <= n <= 2000 ...

  3. hdu 1576 A/B 【扩展欧几里得】【逆元】

    <题目链接> <转载于 >>> > A/B Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)( ...

  4. HDU 5114 扩展欧几里得

    题目大意:给你两个球的坐标 他们都往(1, 1)这个方向以相同的速度走,问你他们在哪个位置碰撞. 思路:这种题目需要把x方向和y方向分开来算周期,两个不同周期需要用扩展欧几里得来求第一次相遇. #in ...

  5. [ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)

    Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael ...

  6. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

  7. poj 2891 扩展欧几里得迭代解同余方程组

    Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...

  8. hdu_1576A/B(扩展欧几里得求逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others)    Me ...

  9. Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7

    Root Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

随机推荐

  1. Web---演示servlet技术(servlet生命周期),解决中文乱码问题

    本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ ...

  2. ffmpeg, libav学习记录

    转载自:http://hi.baidu.com/y11022053/item/81f12035182257332e0f8196 一个偶然遇到了ffmpeg,看起来不多,而且通用性很强,算是一个扎实的技 ...

  3. Branch management

    Branch management */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola,&q ...

  4. hadoop家族之mahout安装

    步骤一.下载mahout  http://www.apache.org/dyn/closer.cgi/mahout/ 我下载的是 mahout-distribution-0.9.tar.gz 16-F ...

  5. What does wildcard address in InetSocketAddress mean?

    In the docs for the constructor InetSocketAddress(int port) it says: Creates a socket address where ...

  6. 1629 B君的圆锥

    #include <iostream> #include <queue> #include <stack> #include <cstdio> #inc ...

  7. hihocoder 1077线段树

    http://hihocoder.com/problemset/problem/1077 #include <bits/stdc++.h> using namespace std; #de ...

  8. js获取几个月前,几周前时间。

    /**  *  DK 命名空间  防止全局变量污染  */ var DK = {} ; /**  * 获取前几个月,默认为一个月,当前时间  * @author duke  * @date 格式为yy ...

  9. 第一个Xcode项目 - 代码修改布局约束

    第一行的选中效果已经有了,那第二行的选中效果怎么做呢?我这里选择改变布局约束来实现选中效果 [我有个用object-c做APP的同事他说,我觉得这个应该去获取色块的位置,然后赋给选中用的View,然后 ...

  10. MYSQL学习笔记2--mysql 静态和动态plugin

    mysql源码编译 .cmke 安装 yum install cmake .依赖的库下载机安装: yum -y install gcc* gcc-c++* autoconf* automake* zl ...