hdu 1573 A/B (扩展欧几里得)
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 (扩展欧几里得)的更多相关文章
- 扩展欧几里得 hdu 1576
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 不知道扩展欧几里得的同学可以参考:https://blog.csdn.net/zhjchengf ...
- hdu 5512 Pagodas 扩展欧几里得推导+GCD
题目链接 题意:开始有a,b两点,之后可以按照a-b,a+b的方法生成[1,n]中没有的点,Yuwgna 为先手, Iaka后手.最后不能再生成点的一方输: (1 <= n <= 2000 ...
- hdu 1576 A/B 【扩展欧几里得】【逆元】
<题目链接> <转载于 >>> > A/B Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)( ...
- HDU 5114 扩展欧几里得
题目大意:给你两个球的坐标 他们都往(1, 1)这个方向以相同的速度走,问你他们在哪个位置碰撞. 思路:这种题目需要把x方向和y方向分开来算周期,两个不同周期需要用扩展欧几里得来求第一次相遇. #in ...
- [ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)
Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael ...
- 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个点,求射 ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- hdu_1576A/B(扩展欧几里得求逆元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Me ...
- 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 ...
随机推荐
- strcmp函数实现及分析
最近看C,看到strcmp函数,对它的实现原型不很清楚,于是到网上搜.网上算法一大堆,看了很多代码后自己做了一下总结 strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果 ...
- JavaScript高级程序设计42.pdf
IE中的事件对象 要访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法.在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在 wondow.e ...
- WE-1202 (JGX-X5 v1.3)刷openwrt
当前固件版本显示 固件版本 RippleOS硬件型号 RippleTek WE-1202CPU型号是 MT7620N路由主板上面丝印是 JGX-X5 v1.3 买的时候选择的RippleOS固件,后 ...
- node begining
node begining */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola," ...
- 我的第一个JApplet-绘制笑脸
初学Java,有很多东西都不太理解,但是我想以前初学C语言的时候也是不太懂,先参考着书上的程序写,然后用多了就自然而然的懂了! 下面来简单的介绍一下我自学的第一个Java小应用程序-绘制笑脸,下面是源 ...
- Node调试工具JSHint
Node调试工具JSHint的安装及配置教程 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-27我要评论 Node的优势我就不再乱吹捧了,它让javascript统一web的前后台成 ...
- 如何在WIN7中关闭JAVA自动更新
在win7系统上面安装了JAVA JRE或JDK后,就会启动一个jusched,它会定时检查更新,每次开机都会推荐更新或者升级,可能有的朋友在win7下无论如何都关不掉java客户端的自动更新,而又不 ...
- 清理300多台MySQL数据库的过期binlog日志
早晨睡梦中,被 on-call了,说磁盘报警,赶紧起来打开email,收到上百封email报警,数据库磁盘不够了,查询了原因 [xxx@xxxx cacti]$ ssh xxxx "df - ...
- Python 基础学习
http://www.cnblogs.com/Wxtrkbc/p/5486253.html
- mysql 交互式连接和非交互式连接
交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端 mysql_real_connect() 函数介绍 函数原型描述: MYSQL *m ...