• P4777 【模板】扩展中国剩余定理(EXCRT)


    浪费我好多时间因为没找着一篇好的教程嘤嘤嘤

    推荐一位大神的博客(是真的厉害):dalao

    以下是c++版本的程序

    #include <iostream>
    #include <cstdio>
    #define ll __int128 
    using namespace std;
    
    ll C1,C2,M1,M2,C[1000002],M[1000002],x,y,n,t;
    
    ll gcd(ll x,ll y){
    	return y==0?x:gcd(y,x%y);
    }
    ll exgcd(ll a,ll b,ll &x,ll &y){
    	if(b==0){
    		x=1,y=0;
    		return a;
    	}
    	int r=exgcd(b,a%b,x,y);
    	int tmp;
    	tmp=x,x=y,y=tmp-(a/b)*y;
    	return r;
    }
    
    ll inv(ll a,ll b){
    	ll r=exgcd(a,b,x,y);
    	return (x%b+b)%b;
    }
    
    int main(){
    	scanf("%lld",&n);
    	for(ll i=1;i<=n;i++)
    		scanf("%lld%lld",&M[i],&C[i]);
    	for(ll i=2;i<=n;i++){
    		C1=C[i-1],C2=C[i],M1=M[i-1],M2=M[i];
    		t=gcd(M1,M2);
    		M[i]=(M1*M2)/t;
    		C[i]=(inv(M1/t,M2/t)*(C2-C1)/t)%(M2/t)*M1+C1;
    		C[i]=(C[i]%M[i]+M[i])%M[i];
    	}
    	printf("%lld",C[n]);
    	return 0;
    }
    

      

  • 相关阅读:
    布局
    面向对象....(概况)
    下拉城市列表
    下拉列表
    内容窗体
    《面向对象》-继承
    《面向对象》--类
    《面向对象》第一讲
    常用的正则表达式
    正则表达式
  • 原文地址:https://www.cnblogs.com/jindui/p/11190761.html
Copyright © 2020-2023  润新知