扩展欧几里得a*y-b*y=1

其实本来对数论好害怕的==测试成绩还好,虽说是因为这个点卡住了,活生生从第一掉到第五,也算差强人意

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=79840#problem/E

Description

The modular modular multiplicative inverse of an integer <var>a</var> modulo <var> m</var> is an integer <var>x</var> such that <var>a-1</var>≡<var>x</var> (mod <var>m</var>). This is equivalent to <var>a</var><var>x</var>≡1 (mod <var>m</var>).

Input

There are multiple test cases. The first line of input is an integer <var>T</var> ≈ 2000 indicating the number of test cases.

Each test case contains two integers 0 < <var>a</var> ≤ 1000 and 0 < <var>m</var> ≤ 1000.

Output

For each test case, output the smallest positive <var>x</var>. If such <var>x</var> doesn't exist, output "Not Exist".

Sample Input

3
3 11
4 12
5 13

Sample Output

4
Not Exist
8
后来提交发现不是错在模板改错了== 是x=0时的特判 当解出x=0时 是必然b*y=-1 那么b=1 a最小取1就一定存在一个y与之对应

#include <iostream>
#include<cstdio>
using namespace std;
int a,b,c,q,x,y;
int t;
int gcd(int a,int b)
{
     return b?gcd(b,a%b):a;
}
void extend_Euclid(int a,int b)
{
     if(b==0)
     {
          x=1;
          y=0;
          return;
     }
     extend_Euclid(b,a%b);
     int tmp=-x;
     x=-y;
     y=tmp-(a/b)*y;
}
int main()
{
     //freopen("cin.txt","r",stdin);
    while(~scanf("%d",&t))
{
     while(t--)
    {
        scanf("%d%d",&a,&b);
        
        q=gcd(a,b);

        if(q!=1)
       {
           puts("Not Exist");
           continue;
       }

       //b=-b;
        extend_Euclid(a,b);
        //printf("%I64d %I64d\n",x,y);
        x=(x%b+b)%b;
        //y=(a*x-1)/b;
        if(x==0) x=1;
        printf("%d\n",x);
}

    }




    return 0;
}

没改模板的
#include <iostream>
#include<cstdio>
using namespace std;
int a,b,c,q,x,y;
int t;
int gcd(int a,int b)
{
     return b?gcd(b,a%b):a;
}
void extend_Euclid(int a,int b)
{
     if(b==0)
     {
          x=1;
          y=0;
          return;
     }
     extend_Euclid(b,a%b);
     int tmp=x;
     x=y;
     y=tmp-(a/b)*y;
}
int main()
{
     //freopen("cin.txt","r",stdin);
    while(~scanf("%d",&t))
{
     while(t--)
    {
        scanf("%d%d",&a,&b);
        
        q=gcd(a,b);

        if(q!=1)
       {
           puts("Not Exist");
           continue;
       }

       //b=-b;
        extend_Euclid(a,b);
        //printf("%I64d %I64d\n",x,y);
        x=(x%b+b)%b;
        //y=(a*x-1)/b;
        if(x==0) x=1;
        printf("%d\n",x);
}

    }




    return 0;
}
最难以接受的是居然把b直接带进去就行了==学长说要是求最小的y就先变号然后一样。。。。
全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
10-27 02:29
已编辑
门头沟学院 嵌入式工程师
牛客72783561...:简历不是这么写的,你这两个项目只说了用到了什么技术,却没说取得了什么成果,在我看来这就是你自己做的一个demo,没有价值。你为什么不写你电赛国二的那个项目?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务