hdu1576 A/B 扩展欧几里德算法
来源:互联网 发布:sql语句中系统时间 编辑:程序博客网 时间:2024/06/07 08:08
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
Sample Output
n=A%9973,则n=A-A/9973*9973。又A/B=x,则A=Bx。所以Bx-A/9973*9973=n。即Bx-9973y=n,x=(x%9973+9973)%9973。
#include<iostream>#include<cstdlib>#include<string>#include<cstring>#include<algorithm>using namespace std;void extentgcd(int a,int b,int &x,int &y){ if(!b) { x=1; y=0; } else { extentgcd(b,a%b,y,x); y-=x*(a/b); }}int main(){ int T; cin>>T; for(int i=1;i<=T;i++) { int n,b; cin>>n>>b; int x,y; extentgcd(b,9973,x,y); x=x*n; x=(x%9973+9973)%9973;//为了防止x为负数 cout<<x<<endl; } return 0;}
拓展欧几里德模板
void extentgcd(int a,int b,int &x,int &y)//ax+by=gcd(a,b)中x,y的值{ if(!b) { x=1; y=0; } else { extentgcd(b,a%b,y,x); y-=x*(a/b); }
}
注意:对于a*x+b*y=c;当c是gcd(a,b)的倍数时才有解
x=(x%9973+9973)%9973可以这样处理得到非负最小的x
y=(c-a*x)/b;
0 0
- hdu1576 A/B(扩展的欧几里德算法)
- hdu1576 A/B 扩展欧几里德算法
- hdu1576 A/B (扩展欧几里德)
- Hdu1576 A-A/B 扩展欧几里德
- HDU1576 A/B 扩展欧几里德简单题
- HDU1576 A/B 扩展欧几里得
- HDU1576 A/B(扩展欧几里得)
- [hdu1576]: A/b (扩展欧几里得)
- HDU 1576 A/B 扩展欧几里德算法
- hdu 1576 A/B 扩展欧几里德算法
- HDU 1576 A/B 扩展欧几里德算法
- HDU 1576 A/B (扩展欧几里德算法)
- HDU 1576 A/B 扩展欧几里德算法
- hdu1576 A/B 扩展欧几里得求逆元
- hdu1576(A/B)扩展欧几里得
- HDU1576 A/B (扩展欧几里得求逆元)
- 扩展欧几里德的算法:a mod b的逆
- hdu 1576 A/B 欧几里德算法的扩展
- leetcode:Jump Game II 【Java】
- JQuery $post函数
- 【Android】EditText获得焦点以及失去焦点
- PAT-A1029. Median (25)
- 如何实现网页点击左边的导航右边显示对应的页面?
- hdu1576 A/B 扩展欧几里德算法
- 我与即时通讯 - PC 客户端
- PAT-A1048. Find Coins (25)
- 基础练习 01字串
- POJ2485 prim算法最小生成树
- 大四
- 12.2 元字段(Meta-Fields) (for Elasticsearch)
- git的使用
- jsp/servlet中 forward, include, reDirect 之间的区别