扩展欧几里得求乘法逆元

原创 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;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

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

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
  • 899

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

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

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

【序言】正好今天BZOJ崩了(反正我上不去),我总算可以静下心来研究一些东西。乘法逆元已经不陌生了,但是平常不怎么用到(skydec整天做神题肯定很熟练了,ORZ),因此是该好好复习一下。 万一我以后...
  • u013724185
  • u013724185
  • 2014年04月25日 21:11
  • 1976

扩展欧几里德算法求乘法逆元(C语言版)

#include   int ExtendedEuclid( int f,int d ,int *result);   int main()   {   int x,...
  • Slience_Perseverance
  • Slience_Perseverance
  • 2011年08月17日 15:04
  • 6667

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

乘法逆元的定义:       A * X MOD N == 1则称X为A关于模N的乘法逆元。 注:       只有两个数互素的时候才会有乘法逆元。       两个数不互素是没有乘法逆元的。   费...
  • Wind_white
  • Wind_white
  • 2017年03月12日 13:41
  • 1331

三种求乘法逆元方法详解

P3811 【模板】乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元。 输入输出格式 输入格式:   一行n,p   输出格式:...
  • WhiStLenA
  • WhiStLenA
  • 2017年10月15日 14:00
  • 333

乘法逆元与费马小定理

逆元:类似倒数和相反数的概念,具体自己百度,我也是百度的,这让我想起了离散数学中提到了左逆右逆,哎,离散没学好啊。乘法逆元:我们知道(A/B)%M=(A∗(1/B))%M(A/B)\%M=(A*(1/...
  • FlushHip
  • FlushHip
  • 2016年05月17日 19:54
  • 839

乘法逆元的几种计算方法

乘法逆元是数论中重要的内容,也是 ACM 中常用到的数论算法之一。所以,如何高效的求出乘法逆元是一个值得研究的问题。 这里我们只讨论当模数为素数的情况,因为如果模数不为素数,则不一定每个数都有逆元。...
  • Rain722
  • Rain722
  • 2016年11月15日 13:21
  • 3608

乘法逆元小结

在求解除法取模问题时(a/b)%m (a/b) \% m,我们可以转化为(a%(b∗m))/b(a \% (b * m))/b, 但是如果b很大,则会出现精度问题,所以我们避免使用除法直接计算。 ...
  • Yukizzz
  • Yukizzz
  • 2016年04月09日 14:28
  • 6884

扩展欧几里得最小整数解

我们先讨论a,b,c都大于0的情况 (都为整数) [cpp] view plain copy   int exgcd(int a,int b,int &x,int &y)   {...
  • qq_20200047
  • qq_20200047
  • 2017年05月04日 11:36
  • 674
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:扩展欧几里得求乘法逆元
举报原因:
原因补充:

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