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

算法基础之表达整数的奇怪方式

表达整数的奇怪方式

中国剩余定理:

  • 求M = 所有m之积 然后Mi = M / mi在这里插入图片描述

    • x = 如下图 满足要求
      • 在这里插入图片描述

扩展中国剩余定理

  • 在这里插入图片描述

  • 找到x **使得x mod mi = ai**成立

    • 对于每两个式子 都可以推出①式

      • 即 用扩展欧几里得算法 可以算出k1,-k2和m2–m1

      • 在这里插入图片描述

      • 判无解 : 若**(m2–m1) % d != 0** 说明该等式无解 即原方程无解 本题无解

    • 找到最小正整数解

      • 已知k1的通式(如下图 代入原方程可证成立) 则求最小正整数解 只要 %abs(a2/d)
      • 在这里插入图片描述
    • 等效替代

      • 设a0 = gcd(a1,a2) , m0 = k1 * a1 + m1 得到新的式子和原方程长得一模一样

      • 在这里插入图片描述

      • 也就是说 每两个式子 都可以通过合并的方式 写成一个式子

      • 只要将所有n个式子全都合并成一个式子 x = k*a + m 就可以求解x了

  •   #include <iostream>#include <algorithm>using namespace std;typedef long long LL;LL exgcd(LL a,LL b,LL &x,LL &y){  //拓展欧几里得算法if(!b){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 x=0,m1,a1;cin>>a1>>m1;for(int i=0;i<n-1;i++){  //输入n-1次LL m2,a2;cin>>a2>>m2;LL k1,k2;LL d=exgcd(a1, a2,k1,k2);if((m2-m1) % d)  //无解{x = -1;break;}k1 *= (m2-m1) / d;  //k1乘相应系数k1 = (k1 %(a2/d) + a2 / d) % (a2/d);  //见下方注释x = k1 * a1 + m1;  //根据公式③//更新a1 m1 进行下一次合并m1 = k1 * a1 + m1;a1 = abs(a1 * a2 /d);}if(x!=-1) x=(m1%a1+a1)%a1;  //若x为负数 将x变成正数cout<<x<<endl;return 0;}
    
    • k1 = (k1 %(a2/d) + a2 / d) % (a2/d);
      • c++中 若k1为负数 %完 仍然是负数 而不是正数 因此 我们在%完后 +上一个膜数 再膜一次
      • 就可以求出最小正整数k1

参考题解 :https://www.acwing.com/solution/content/3539/

http://www.lryc.cn/news/265614.html

相关文章:

  • WEB 3D技术 three.js 设置图像随窗口大小变化而变化
  • 实战案例:缓存不一致问题的解决(redis+本地缓存caffine)
  • 【开源CDP】市场增长未来的探索,开源CDP带来的技术崛起与变革
  • 第11章 GUI Page423~424 步骤六 支持文字,使用菜单,对话框输入文字
  • 【Qt】Qt Creator 警告: Unused parameter ‘xxx‘
  • 「Vue3面试系列」Vue3.0性能提升主要是通过哪几方面体现的?
  • 网络结构模式
  • IIC及OLED实验
  • day6 力扣公共前缀--go实现---对字符串的一些思考
  • 27.Java程序设计-基于Springboot的在线考试系统小程序设计与实现
  • Redis可视化工具Redis Desktop Manager mac功能特色
  • 【C++】揭开运算符重载的神秘面纱
  • 竞赛保研 基于LSTM的天气预测 - 时间序列预测
  • 前端常用的开发工具
  • 鸿蒙开发语言介绍--ArkTS
  • 关于“Python”的核心知识点整理大全36
  • 安装nodejs,配置环境变量并将npm设置淘宝镜像源
  • 12.18构建哈夫曼树(优先队列),图的存储方式,一些细节(auto,pair用法,结构体指针)
  • 《Python》面试常问:深拷贝、浅拷贝、赋值之间的关系(附可变与不可变)【用图文讲清楚!】
  • 使用PE信息查看工具和Dependency Walker工具排查因为库版本不对导致程序启动报错问题
  • Python编程题目答疑「Python一对一辅导考试真题解析」
  • Python---搭建Python自带静态Web服务器
  • 在服务器上部署SpringBoot项目jar包
  • [python]python实现对jenkins 的任务触发
  • Python生成圣诞节贺卡-代码案例剖析【第18篇—python圣诞节系列】
  • 深度剖析Ajax实现方式(原生框架、JQuery、Axios,Fetch)
  • 任天堂,steam游戏机通过type-c给VR投屏与PD快速充电的方案 三type-c口投屏转接器
  • Flink系列之:Checkpoints 与 Savepoints
  • 【优质书籍推荐】LoRA微调的技巧和方法
  • Linux一行命令配置jdk环境