A/B(扩展欧几里得算法)

转载 2015年07月08日 12:47:17

A/B

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2814    Accepted Submission(s): 2082


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
 

Author
xhd
 

Source
 


#include<cstdio>
#include<iostream>
#define N 9973
using namespace std;
/*
设(A/B)%9973=k;A=9973*x*B+B*k
又因为 A%9973=n所以B*k%9973=n
B*k=9973*y+n;
gcd(B,9973)=1;
B*k/n-9973*y/n=1
*/
int exGcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1;
		y=0;
		return a;// 此时a是最开始(a,b)的最大公约数,那么  gcd(a,b)*1+ 0*0=gcd(a,b),肯定对的,在这里,我认为,y可以为任何值都对
	}

	int d=exGcd(b,a%b,y,x);
	y-=a/b*x;
	return d;//返回最大公约数
}
int main()
{
    int x,y,t,n,m;
    cin>>t;
    while(t--)
    {
        cin>>n>>m;
        exGcd(m,N,x,y);
        //cout<<x<<endl;这里得到的x值是负数!
        //我们由公式x=x0+k*b得到x的任意一个解,非负数就行了!
        x=(x%N+N)%N;//这里得到的就是
        cout<<(x*n)%N<<endl;//算出来就可以了!
    }
}


扩展欧几里得算法及其应用

扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。 证明:设 a>...
  • rebelqsp
  • rebelqsp
  • 2014年02月24日 20:03
  • 2119

扩展欧几里德算法模版题(求逆元+分析+题目)HDU1576 A/B

首先给大家普及一下什么是扩展欧几里德算法,它是由欧几里德算法演变的,即我们常说的辗转相除法。 代码如下: int gcd(int a,int b){     return b?gcd(b,a%...
  • Singular__point
  • Singular__point
  • 2016年11月18日 16:56
  • 1178

扩展欧几里德算法Java实现和青蛙相遇

问题衔接: http://poj.org/problem?id=1061 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度...
  • zs064811
  • zs064811
  • 2017年02月12日 17:59
  • 945

ACM_扩展欧几里得算法

我们先来回顾一下欧几里得算法,欧几里得算法是用于求两个数的最大公约数:其核心为一句 Gcd(a, b) = Gcd(b, a%b) (Gcd表示两个数的最大公约数),直到a%b == 0时,可得到Gc...
  • RaAlGhul
  • RaAlGhul
  • 2016年05月23日 18:59
  • 565

【专题】欧几里得算法、扩展欧几里得、乘法逆元

1.欧几里得 用途 最大公因数和最小公倍数 定理:  gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)   证明: 我们令c=gcd(a,b)c=gcd(a,b)...
  • mmy1996
  • mmy1996
  • 2016年10月31日 23:29
  • 854

扩展欧几里德算法(附证明)

扩展欧几里德算法(附证明) 扩展欧几里得算法在acm-icpc中是常用算法,主要用于在已知a,b的情况下求解一组x,y,使它们满足贝祖等式: ax+by=gcd(a,b)=dax+by = gcd(a...
  • lincifer
  • lincifer
  • 2015年10月24日 23:45
  • 4249

扩展欧几里德算法详解以及乘法逆元

转载网址:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 有些地方看不懂,但觉得写的很棒,先转载下来,以后慢慢研究…… ...
  • Stray_Lambs
  • Stray_Lambs
  • 2016年08月05日 22:26
  • 6280

欧几里得扩展算法详解及POJ1061

最初是在PKU的acm上刷题,刚接触1061青蛙的约会这道题的时候写了个简单暴力的方法,在一定范围内感觉挺对的,但是提交后WA了,于是在一起K题的战友那里第一次听说了这个算法——欧几里得扩展算法。费了...
  • silent_strings
  • silent_strings
  • 2013年07月04日 13:37
  • 1752

欧几里得 & 拓展欧几里得算法 讲解 (Euclid & Extend- Euclid Algorithm)

欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。 ——百度百科 代码...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2015年08月16日 02:10
  • 7974

欧几里德算法的证明

在学习算法的过程中,与欧几里德算法来了一次邂逅,于是又去学习了一下。。。 欧几里德算法又称辗转相除法,用于计算两个数的最大公约数。 定理: 设a=qb+r,其中a,b,q,r都是正整数,则gc...
  • flpanbin
  • flpanbin
  • 2016年07月08日 14:46
  • 2365
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:A/B(扩展欧几里得算法)
举报原因:
原因补充:

(最多只允许输入30个字)