zoukankan      html  css  js  c++  java
  • [题解]luogu_P2613有理数取余

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int mod=19260817;
    inline int read(){
        int res=0,fix=1;char ch;
        while(!isdigit(ch=getchar()))fix=ch=='-'?-1:fix;
        do{
            res=(res<<3)+(res<<1)+(ch^48);
            res%=mod;
        }
        while(isdigit(ch=getchar()));
        return res*fix;
    }
    ll a,b,x,y;
    int exgcd(ll a,ll b,ll &x,ll &y){
        if(!b){
            x=1,y=0;return a;
        }
        int d=exgcd(b,a%b,x,y);//最大公約數 
        int z=x;x=y,y=z-y*(a/b);
        return d;
    }
    int main(){
        a=read(),b=read();
        if(b==0){
            printf("Angry!");return 0;
        }
        exgcd(b,mod,x,y);x=(x%mod+mod)%mod;
        printf("%lld
    ",((long long)(a*x))%mod);
    }
    /*
    x同余a/b (mod p) 
    => x*b 同余 a/b*b (mod p)
    => b*x 同余 a (mod p)
    若有 b*x1 同余 1(mod p)
    => b*(a*x1)同余a (mod p)
    对比发现 x=a*x1
    exgcd求解
    a,b读入时取模
    特判 
    p|b时 bx mod p == 0
    若p|a a mod p == 0 所以 bx 同余 a (mod p) 恒成立
    若p!|a a mod p !=0 所以 此时不成立
    p!|b时 b,p互质 bx1 同余 1 (mod p) 一定有解
    所以当且仅当 b mod p == 0 时无解 
    */
  • 相关阅读:
    数组的反转和二维数组
    初识数组
    Python学习笔记-Day8
    Python学习笔记-Day7
    Python学习笔记-Day6
    Python学习笔记-Day5
    Python学习笔记-Day4
    Python学习笔记-Day3
    Python学习笔记-Day2
    Python学习笔记-Day1
  • 原文地址:https://www.cnblogs.com/superminivan/p/10840620.html
Copyright © 2011-2022 走看看