hdu 1576 A/B(扩展欧几里得)
来源:互联网 发布:淘宝物流评分怎么提升 编辑:程序博客网 时间:2024/06/04 17:44
A/B
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6682 Accepted Submission(s): 5299
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
这个题是用扩展欧几里得算法----xa+yb=gcd(a,b);此题中:B*x+9973*y=gcd(B, 9973)=1;可以求出x,y的一组解;
由题目知:n=A%9973=A-9973*k;
设A/B=m, A=B*m; n=B*m-9973*k; 则B*m/n-9973*k/n=1; 由扩展欧几里得算法可以解出m/n;因为m/n可能为负,所以需要转化一下m/n=(m/n%9973+9973)%9973;
(A/B)%9973=m%9973=(m/n%9973+9973)%9973;
如果想深入了解扩展欧几里得算法请戳这里
代码附上:
using namespace std;int exgcd(int a, int b, int &x, int &y){ if(b==0){ x=1; y=0; return a; } int r=exgcd(b, a%b, x, y); int t=x; x=y; y=t-(a/b)*y; return r;}int main(){ int T; cin >> T; while(T--){ int n, B; cin >> n >> B; int tem=9973; int x, y; int r=exgcd(B, tem, x, y); int K=(x%tem+tem)*n%9973; cout << K << endl; } return 0;}
阅读全文
0 0
- HDU 1576 A/B (扩展欧几里得)
- hdu 1576 A/B(扩展欧几里得)
- HDU - 1576 A / B(扩展欧几里得)
- 【HDU】1576 - A/B(扩展欧几里得)
- hdu 1576 A/B(扩展欧几里得)
- hdu 1576 A/B(扩展欧几里得)
- HDU 1576 A/B 扩展欧几里得
- hdu-1576-A/B【扩展欧几里得算法】
- HDU 1576 A/B (扩展欧几里得)
- hdu 1576A/B(扩展欧几里得)
- hdu 1576 A/B 扩展欧几里得算法
- HDU 1576 A/B 扩展欧几里得
- HDU 1576 A/B 扩展欧几里得
- HDU 1576A/B 扩展欧几里得
- HDU 1576-A/B(扩展欧几里得算法)
- HDU-1576 A/B (扩展欧几里得算法)
- HDU 1576 A/B 扩展欧几里得
- 【扩展欧几里得】hdu 1576 A/B
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和
- easyui datagrid 样式自定义
- IDEA使用 @Autowired和@Resource时报错
- 三范式理解
- python安全编码指南
- hdu 1576 A/B(扩展欧几里得)
- 接雨水-LintCode
- Dialog使用细节
- XGBoost代码走读分析笔记
- git 恢复到更改前的状态(还原代码)
- 读书笔记 How Google Tests Software --Foreword by Patrick Copeland
- ELK搭建互联网亿级日志实时分析平台
- PHP出现SSL certificate: unable to get local issuer certificate的解决办法
- c# panel 自动调整大小