当前位置: 首页 > news >正文

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

#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;
}

相关文章:

  • 高性能锁机制 CAS:Java 并发编程中的深度剖析
  • 一、内存调优
  • 低功耗:XILINX FPGA如何优化功耗?
  • 人工智能(AI)与BIM:建筑业创新实践的深度融合
  • 供应商管理有哪些风险点?
  • C++11特性
  • HTML向四周扩散背景
  • DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成
  • C#中的ThreadStart委托
  • 代理IP高可用性与稳定性方案:负载均衡、节点健康监测与智能切换策略
  • LLaMA-Factory:了解webUI参数
  • 【hive】hive内存dump导出hprof文件
  • 虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?
  • solidity智能合约-知识点
  • 开源音视频转文字工具:基于 Vosk 和 Whisper 的多语言语音识别项目
  • B/S架构和C/S架构的介绍与分析
  • 如何在LVGL之外的线程更新UI内容
  • 从纸质契约到智能契约:AI如何改写信任规则与商业效率?​——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
  • Unreal 从入门到精通之SceneCaptureComponent2D实现UI层3D物体360°预览
  • 学习VS2022离线安装包的下载方法
  • “打铁”热邂逅江南水乡,长三角首个国际级铁三赛事有何不同
  • 人民日报头版:紧盯“学查改”,推动作风建设走深走实
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开“无条件谈判”
  • 广东高州发生山体滑坡,造成2人遇难4人送医救治1人失联
  • 私家车跑“顺风”出事故,意外险赔不赔?
  • 上博东馆常设陈列入选全国博物馆“十大精品”