zoukankan      html  css  js  c++  java
  • 备战NOIP——模板复习26

    这里只有模板,并不作讲解,仅为路过的各位做一个参考以及用做自己复习的资料,转载注明出处。

    中国剩余定理(CRT)

    /*Copyright: Copyright (c) 2018
    *Created on 2018-11-08
    *Author: 十甫
    *Version 1.0 
    *Title: CRT
    *Time: inf mins
    */
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    const int size = 15;
    typedef long long ll;
    
    int n;
    ll a[size], b[size];
    inline ll add(ll a, ll b, ll p) {
        ll res = 0;
        while(b) {
            if(b & 1) res = ((res % p) + (a % p)) % p;
            a = ((a % p) + (a % p)) % p;
            b /= 2;
        }
        return res;
    }
    inline void ex_gcd(ll a, ll b, ll &x, ll &y, ll &d) {
        if(!b) {
            d = a, x = 1, y = 0;
            return;
        }
        ex_gcd(b, a % b, y, x, d);
        y -= (a / b) * x;
    }
    inline ll inv(ll a, ll b) {
        ll d, x, y;
        ex_gcd(a, b, x, y, d);
        return d == 1 ? (x % b + b) % b : -1;
    }
    ll CRT() {
        ll M = 1;
        for(int i = 1;i <= n;i++) {
            M *= b[i];
        }
        ll ans = 0;
        for(int i = 1;i <= n;i++) {
            ans = ((ans % M) + add(add(a[i],  M / b[i], M),  inv(M / b[i], b[i]), M) % M) % M;
        }
        return ans;
    }
    
    int main() {
        scanf("%d", &n);
        for(int i = 1;i <= n;i++) {
            scanf("%lld", &a[i]);
        }
        for(int i = 1;i <= n;i++) {
            scanf("%lld", &b[i]);
        }
        printf("%lld
    ", CRT());
        return 0;
    }
    NOIP 2018 RP++
  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/Black-S/p/9930697.html
Copyright © 2011-2022 走看看