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;
}
相关推荐
w_zero_one16 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David16 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
秋天的怀念_David17 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪17 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪17 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!19 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.19 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净20 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心20 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海21 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人