A/B + exgcd (拓展欧基里德算法)
来源:互联网 发布:大淘客cms建站要钱吗 编辑:程序博客网 时间:2024/05/21 16:56
A/B
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1036 Accepted Submission(s): 806
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/*思路:根据题意有你n = (A%9973) ;那么展开就是9973*y + n = A ----(1);同样由题意:设 A/B = x;那么A= B*x ----(2);将(2)式代入(1)中很容易得到9973*y + n = B*x ;既B*x - 9973*y = n ;我们可以先计算B*x = 9973*y = 1 的解,得到的x,处理完x<0的情况,再乘以n就是答案了*/#include<iostream>#include<cstring>#include<cstdio>using namespace std;long long exgcd(long long a,long long b,long long &x,long long &y){ if(b==0) { //? x=1;y=0; return a; } else{ long long d=exgcd(b,a%b,x,y); long long temp=x; //? x=y; y=temp-a/b*y; return d;//返回最大共公约数 }}int main(){ int t ; cin >> t ; while(t--) { long long n , B , x , y; cin >>n>>B; exgcd(B,9973, x , y); if(x<0) { x = x + 9973 ; y = y - B ; } x *= n ; cout<<x%9973<<endl; } return 0;}
- A/B + exgcd (拓展欧基里德算法)
- java实现 拓展欧几里得算法 exgcd
- HDU 1576-A/B(拓展欧几里得算法)
- exgcd拓展欧几里得
- HDU1576-A/B(乘法逆元+exgcd)
- HDU 1576 A/B(拓展欧几里得)
- HDU 1576 A/B(拓展欧几里得)
- HDOJ 1576 A/B(拓展欧几里得)
- 拓展欧几里得 HDU 1576 A/B
- HDU-1576(A/B)拓展欧几里得
- poj1061青蛙的约会(exgcd拓展欧几里得)
- 【高精度算法】A*B
- 【高精度算法】A+B
- 【高精度算法】A+B
- 算法学习 -- a+b
- K - A/B(逆元)(拓展欧几里德)
- 拓展欧几里得解方程ax+by=gcd(a,b)
- hdu 1576 A/B(拓展欧几里得求逆元模板题)
- Android PhoneGap简析
- 在iOS中使用OpenSSL库
- Linux Makefile example
- emeditor大纲显示函数名列表
- 多线程1
- A/B + exgcd (拓展欧基里德算法)
- 初试.net使用ajax调用后台方法
- GL_ALPHA/GL_LUMINANCE/GL_INTENSITY之差别
- 怎样新建Oracle数据库
- URLRewrite伪静态实现-url重写技术
- 移动客户端UI设计指南
- 三维建模的基础简介
- 关于DB_CACHE_SIZE中涉及到的granule size(颗粒值)
- 【AeroSnap功能用不上?如何才能禁用】