扩展欧几里得求乘法逆元

原创 2016年06月02日 12:18:19

参考http://blog.csdn.net/zhjchengfeng5/article/details/7786595

#include <stdio.h>
#include <math.h>
__int64 ans_gcd(__int64 a,__int64 b,__int64 *x,__int64 *y)
{
    if (b==0)
    {
        *x=1;
        *y=0;
        return a;
    }
    __int64 ans=ans_gcd(b,a%b,x,y);
    __int64 temp=*x;
    *x=*y;
    *y=temp-a/b*(*y);
    return ans;
}
__int64 calculate(__int64 a,__int64 b)
{
    __int64 x,y,ans;
    __int64 gcd=ans_gcd(a,b,&x,&y);
    if (1%gcd!=0)//如果a与b不互质则没有乘法逆元
        return -1;
    x=x*(1/gcd);
    b=abs(b);
    ans=x%b;
    if (ans<=0)
        ans=ans+b;
    return ans;
}
int main()
{

    __int64 i,j,a,b,ans;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%I64d%I64d",&a,&b);
        ans=calculate(a,b);//求a关于b的乘法逆元
        if (ans==-1)
            printf("Not Exist\n");
        else
            printf("%I64d\n",ans);

    }
    return 0;
}




相关文章推荐

扩展欧几里得、求乘法逆元及其应用、中国剩余定理(互质版和非互质版)、欧拉函数、快速判素数模板

互质版: #include #include #include using namespace std; typedef __int64 int64; int64 a[15...

扩展欧几里得算法求乘法逆元

对于同余方程 ax ≡\equiv 1 (mod b),我们称x为a关于模b的乘法逆元,具体可见百度百科词条“乘法逆元”,那么如何求出最小的正整数x为a关于模b的乘法逆元呢?我们需要用到扩展欧几里得定...

扩展欧几里得(乘法逆元)

百度百科:扩展欧几里得http://baike.baidu.com/link?url=wFOWllqYIDKw1sHLTeJ-MOFHr6RLwP-3RwWroNS5xFpJq-Z3dDj2Wcpvy...

Strange Way to Express Integers(扩展欧几里得+乘法逆元+中国剩余定理求解非互质的模线性方程组)

Link:http://poj.org/problem?id=2891 Strange Way to Express Integers Time L...

乘法逆元(扩展欧几里得或费马小定理)

欧拉定理(又称费马-欧拉定理):已知a和n为正整数,并且a和p互素,则a^phi(n) ≡ 1(mod n)。 证明:   设集合Z = {X1, X2, X3, .... , Xphi(n)},其中...

乘法逆元 (扩展欧几里得或费马小定理)

欧拉定理(又称费马-欧拉定理):已知a和n为正整数,并且a和p互素,则a^phi(n) ≡ 1(mod n)。 证明:   设集合Z = {X1, X2, X3, .... , Xphi(...

浅谈数论(四)扩展欧几里得算法与乘法逆元

扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。 证明:设 a>b。   1...
  • keshuqi
  • keshuqi
  • 2016年07月15日 11:28
  • 230

乘法逆元的扩展欧几里得解法

【序言】正好今天BZOJ崩了(反正我上不去),我总算可以静下心来研究一些东西。乘法逆元已经不陌生了,但是平常不怎么用到(skydec整天做神题肯定很熟练了,ORZ),因此是该好好复习一下。 万一我以后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:扩展欧几里得求乘法逆元
举报原因:
原因补充:

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