HDU1576 A/B (扩展欧几里得求逆元)
来源:互联网 发布:vb中format函数用法 编辑:程序博客网 时间:2024/06/10 18:40
A/B
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6572 Accepted Submission(s): 5209
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)。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
21000 5387 123456789
Sample Output
79226060
Author
xhd
Source
HDU 2007-1 Programming Contest
思路:输入n 和 b两个整数,其中n = (a % 9973)a的值可能很大,让求的是a/b 的值,所以应该转换成 n 乘某个值, 又可知, 除以b等于乘b的逆元,又因为b和9973互质,所以gcd(b,9973) = 1, 由扩展欧几里得可得: b*x + 9973*y = 1,两边同时对9973取模可得: b*x 恒等于 1(mod 9973),则x即为b的逆元,用扩展欧几里得求出x即可。
AC代码如下:
#include <bits/stdc++.h>using namespace std;int t,a,b;int mod = 9973;void exgcd(int a, int b, int &x, int &y){if(!b){x = 1; y = 0; }else{exgcd(b,a%b,y,x);y -= (a/b) * x;}}int main(){scanf("%d",&t);while(t --){scanf("%d%d",&a,&b);int x,y;exgcd(b,mod,x,y);int p = (x + mod) % mod;printf("%d\n",a * p % mod);}return 0;}
阅读全文
0 0
- hdu1576 A/B 扩展欧几里得求逆元
- HDU1576 A/B (扩展欧几里得求逆元)
- HDU1576 A/B 扩展欧几里得
- HDU1576 A/B(扩展欧几里得)
- [hdu1576]: A/b (扩展欧几里得)
- hdu1576(A/B)扩展欧几里得
- hdu1576 扩展欧几里得算法求逆元
- hdu1576 A/B (扩展欧几里德)
- Hdu1576 A-A/B 扩展欧几里德
- HDU1576 扩展欧几里得
- hdu1576 扩展欧几里得
- HDU1576 A/B 扩展欧几里德简单题
- hdu1576 A/B(扩展的欧几里德算法)
- hdu1576 A/B 扩展欧几里德算法
- HDU1576 A/B(求逆元)
- A/B(扩展欧几里得)
- HDU1576(扩展欧几里得算法)
- HDOJ A/B 1576【扩展欧几里得+求逆元】
- 6.0权限动态适配(一)(存在问题)
- 反省
- webmagic使用总结
- sqlplus 汉字乱码问题的解决——windows
- HDU1814 Peaceful Commission —— 2-sat 染色法
- HDU1576 A/B (扩展欧几里得求逆元)
- 2017.08.25【NOIP提高组】模拟赛A组
- Android混合开发之WebView使用总结
- mysql的多表查询的相关知识点
- SQL Server触发器的使用
- 学习正则表达式 笔记
- jQuery.fileDownload 成功回调失败原因
- AES和RSA
- 第三章:3.6 典型信号傅里叶变换