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

中国剩余定理 C++

题目

图源ACWING

解题思路

在这里插入图片描述
原链接:https://www.acwing.com/solution/content/3539/

大致步骤

  1. 将第2,3,4…n个方程不断与第一个方程合并,得到方程a1k1+a2k2=m2-m1;
  2. 用扩展欧几里得算法解出a1k1+a2k2=gcd(a1, a2)的结果,再将结果扩大(m2-m1)/d倍即可得到原方程解;
  3. k1通解=k1+a2/dk(k为整数),将k1代回x=a1k1+m1中,可得x=a1k1+a1a2/d*k+m1;
  4. 对比代回前后两方程可得:m1=m1+a1k1, a1=a1a2/d;
  5. 循环n-1次后所得m1就是结果;

代码实现

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;typedef long long LL;LL m1, a1;
LL a[50], m[50];
int n;LL exgcd(LL a, LL b, LL &x, LL &y)
{if(b == 0){x = 1, y = 0;return a;}LL x1, y1, t;t = exgcd(b, a % b, x1, y1);x = y1, y = x1 - a / b * y1;return t;
}void chinese_reminder_therome(LL a1, LL m1)
{for(int i = 2;i <= n;i ++ ){LL a2 = a[i];LL m2 = m[i];LL k1, k2;LL d = exgcd(a1, a2, k1, k2);if((m2 - m1) % d != 0)//只有(m2-m1)%d==0,才有整数解;{cout << -1;return ;}LL t = abs(a2 / d);k1 = k1 * (m2 - m1) / d;k1 = (k1 % t + t) % t;//找到k1的最小值,同时防止为k1为负数的写法m1 = m1 + a1 * k1;//先变m1再变a1,顺序不能变防止m1的变化受到a1的变化影响;a1 = a1 * a2 / d;}cout << m1;
}int main()
{cin >> n >> a1 >> m1;for(int i = 2;i <= n;i ++ ){scanf("%d%d", &a[i], &m[i]);}chinese_reminder_therome(a1, m1);return 0;
}
http://www.lryc.cn/news/458804.html

相关文章:

  • 动态规划lc
  • 介绍xshell的使用技巧
  • 揭秘语音识别巨头1:国内外顶尖技术服务商全解析01(万字长文)
  • JAVA使用SM2算法生成密钥对加密解密加签验签
  • uniapp(vue)打包web项目页面刷新后报404解决方案
  • ansible学习之ansible-vault
  • 封装el-upload组件,用于上传图片和视频的组件
  • 6.将扩散模型与其他生成模型的关联(2)
  • 【C++】基于红黑树封装set和map
  • 24最新新手入门指南:Stable Diffusion!
  • Java-基础
  • 二、后台管理系统布局菜单可拖动
  • socket和http区别
  • 算法:974.和可以被K整除的子数组
  • QD1-P8 HTML 格式化标签(font、pre、b、strong、i、u、del、s、sub、sup)
  • 红米Turbo 3工程固件预览 修复底层 体验原生态系统 默认开启diag端口
  • sql的调优指南及高级sql技巧
  • 生成式专题的第一节课---GAN图像生成
  • 中科星图GVE(案例)——AI实现建筑用地变化前后对比情况
  • Spring Boot中获取application.yml中属性的几种方式
  • YOLO11改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制
  • Python中函数的使用方法
  • 遨游智能终端赋能“危急特”场景,力推北斗技术规模化应用!
  • 构建流媒体管道:利用 Docker 部署 Nginx-RTMP 从 FFmpeg RTMP 推流到 HLS 播放的完整流程
  • 【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段
  • 机器学习与神经网络:从技术前沿到诺贝尔奖的跨越与未来展望
  • java 洛谷题单【数据结构1-2】二叉树
  • 项目优化内容及实战
  • 科研绘图系列:R语言蝴蝶图(Butterfly Chart)
  • 【FPGA开发】Modelsim如何给信号分组