• 一本通1632【 例 2】[NOIP2012]同余方程


    1632:【 例 2】[NOIP2012]同余方程

    时间限制: 1000 ms         内存限制: 524288 KB

    【题目描述】

    求关于 x 的同余方程 ax1(mod b) 的最小正整数解。

    【输入】

    输入只有一行,包含两个正整数 a,b,用一个空格隔开。

    【输出】

    输出只有一行,包含一个正整数 x0 ,即最小正整数解。输入数据保证一定有解。

    【输入样例】

    3 10

    【输出样例】

    7

    【提示】

    数据范围与提示

    对于 40% 的数据,有 2b1000

    对于 60% 的数据,有 2b50000000

    对于 100% 的数据,有 2a,b2000000000

    sol:水模板是一件让人快乐的事。。。

    原式 Ax=1 (%B)
    -->Ax=1+By
    -->Ax-By=1
    -->Ax+By=1 (类似ax+by=c的格式)
    如果1%gcd(A,B)不等于0则无解(显然有解)

    然后就是模板了,。。。

    Ps:突然发现Exgcd里可以求gcd。。。(貌似我智障了)

    /*
    原式 Ax=1 (%B)
      -->Ax=1+By
      -->Ax-By=1
      -->Ax+By=1 (类似ax+by=c的格式)
      如果1%gcd(A,B)不等于0则无解(显然有解)
    */
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    ll A,B;
    //Ax+By=1
    inline ll gcd(ll x,ll y)
    {
        return (!y)?(x):(gcd(y,x%y));
    }
    inline void Exgcd(ll a,ll b,ll &X,ll &Y)
    {
        if(b==0)
        {
            X=1;
            Y=0;
            return;
        }
        Exgcd(b,a%b,X,Y);
        ll XX=X,YY=Y;
        X=YY;
        Y=XX-a/b*YY;
        return;
    }
    int main()
    {
        R(A); R(B);
        ll a,b,c,r,X,Y;
        a=A;
        b=B;
        c=1;
        r=gcd(A,B);
        Exgcd(a,b,X=0,Y=0);
        X=X*c/r;
        ll tmp=b/r;
        X=(X>=0)?(X%tmp):(X%tmp+tmp);
        Wl(X);
        return 0;
    }
    /*
    input
    3 10
    output
    7
    */
    View Code
  • 相关阅读:
    Golang 学习入坑(三)Go语言变量及常量及运算符
    Golang 学习入坑(二)Go语言结构及基本语法及基本类型
    docker 理解和一些应用
    golang学习入坑(一)Go介绍及环境搭建
    VMware安装Centos7超详细程
    2020-05-28 postgresql sequence
    2020-05-18 缓存穿透、缓存击穿、缓存雪崩
    2020-05-15 rocketmq-spring-starter支持多集群
    2020-05-15 rocketmq-spring-starter结合disconf使用
    2020-05-14 RSA加解密
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10440602.html
Copyright © 2020-2023  润新知