AcWing 223. 阿九大战朱最学——扩展欧几里得算法

题目来源

223. 阿九大战朱最学 - AcWing题库

题目描述

自从朱最学搞定了 QQ 农场以后,就开始捉摸去 QQ 牧场干些事业,不仅在自己的牧场养牛,还到阿九的牧场放牛!

阿九很生气,有一次朱最学想知道阿九牧场奶牛的数量,于是阿九想狠狠耍朱最学一把。

举个例子,假如有 1616 头奶牛,如果建了 33 个牛棚,剩下 11 头牛就没有地方安家了。

如果建造了 55 个牛棚,但是仍然有 11 头牛没有地方去,然后如果建造了 77 个牛棚,还有 22 头没有地方去。

你作为阿九的私人秘书理所当然要将准确的奶牛数报给阿九,你该怎么办?

输入格式

第一行包含一个整数 n表示建立牛棚的次数。

接下来 n行,每行两个整数 ai,bi,表示建立了 ai 个牛棚,有 bi 头牛没有去处。

你可以假定不同 ai 之间互质。

输出格式

输出包含一个正整数,即为阿九至少养奶牛的数目。

数据范围

1≤n≤101≤≤10,

1≤ai,bi≤12000001≤1200000,

所有 ai 的乘积不超过 10121012。

输入样例:
复制代码
3
3 1
5 1
7 2
输出样例:
复制代码
16

算法分析

中国剩余定理的经典题;

这道题可以列出方程组,只需计算

其步骤为:

1.计算模数的乘积:M=m1m2......mk;

2.对每个模数mi,计算Mi=M/mi;

3.对每个Mi求解Mi在模mi的逆元yi,即满足Mi*yi同余1模mi;

4.最终解x为:x=∑ai*Mi*yi(mod M),i∈(1,k),其中ai是每个同余方程的余数

Code

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
 
typedef long long LL;
const int N=1005;
LL m[N],a[N];
 
LL exgcd(LL a,LL b,LL &x,LL &y) {//十年Oi一场空,不开longlong见祖宗
    if(b==0) {
        x=1,y=0;
        return a;
    }
    LL d=exgcd(b,a%b,y,x);
    y-=(a/b)*x;
    return d;
}
 
int main() {
    int n;
    cin>>n;
    LL M=1;
    for(int i=1; i<=n; i++) {
        cin>>m[i]>>a[i];
        M*=m[i];
    }
 
    LL t=0;
    for(int i=1; i<=n; i++) {
        LL x,y;
        LL Mi=M/m[i];
        exgcd(Mi,m[i],x,y);
        t=(t+a[i]*Mi%M*x)%M;//按照分析过程进行处理
    }
    t=(t+M)%M;
    cout<<t<<endl;
 
    return 0;
}
相关推荐
纽扣6678 分钟前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
消失的旧时光-194325 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
智者知已应修善业36 分钟前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
AI进化营-智能译站1 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
CS创新实验室2 小时前
从盘边到芯端——硬盘接口七十年变迁史
算法·磁盘调度
xvhao20132 小时前
单源、多源最短路
数据结构·c++·算法·深度优先·动态规划·图论·图搜索算法
MATLAB代码顾问3 小时前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab
FQNmxDG4S3 小时前
JVM内存模型详解:堆、栈、方法区与垃圾回收
java·jvm·算法
We་ct3 小时前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·leetcode·typescript·动态规划
AI科技星3 小时前
精细结构常数α作为SI 7大基本量纲统一耦合常数的量子几何涌现理论
算法·机器学习·数学建模·数据挖掘·量子计算