TZOJ 曹冲养猪 (扩展)中国剩余定理

news2024/10/7 4:27:06

求解:

\equiv a1 (b1)

\equiv a2 (b2)

\equiv a3 (b3)

........

对于 上述式子我们可以拆成 :

M = b1 * p + a1 = b2 * q + a2

左右移项得到:

b1 * p - b2 * q = a2 - a1

可以发现 这就是一个同余方程:

a = b1 , b = b2 , x = p , y = q , c = a2 - a1

 我们就可以用扩展欧几里得算法得到:

p 与 q 的特解 x , y。

同时 p 与 q 的通解也可以获得:p = x + (k * b)  / gcd(a,b) ,q = y + (k * a) / gcd(a,b)

得到新的同余方程:

M = b1 * ( x + k * b / gcd(a,b)) + a1

将原来的  a = b1 , b = b2 , x = p , y = q , c = a2 - a1 。替换回来:

M = b1 * ( p + k * b2 / gcd(b1,b2) ) + a1

化简:因为:b1 * b2 /gcd(b1,b2) =lcm(b1,b2)

所以:M = k * lcm(b1,b2) + p * b1 + a1

得到:新的 a3 =  p * b1 + a1 ,b3 = lcm(b1,b2) 。

这样合并 n - 1次即为答案。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define int long long
const int N=5e4+100;
namespace crt{
    int bi[N],ai[N]; //ai==a ,bi=m1;
    int n;
    int mul(int a, int b ,int p)
    {
        a%=p,b%=p;
        int z = (long double) a / p * b;
        int res = (unsigned long long) a * b - (unsigned long long) z * p;
        return (res + p) % p;
    }
    int exgcd(int a, int b, int &x, int &y) {
        if(b == 0){
            x = 1; y = 0;
            return a;
        }
        int d = exgcd(b, a % b, x, y);
        int z = x;x = y;y = z - (a / b) * x;
        return d;
    }
    int excrt()//拓展中国剩余定理
    {
        int x, y, k;
        int M = bi[1], ans = ai[1];//第一个方程的特解
        for(int i = 2; i <= n; ++ i) {
            int a = M, b = bi[i], c = (ai[i] - ans % b + b) % b;
            int d = exgcd(a, b, x, y);
            int bg = b / d;//lcm
            if(c % d != 0) return 1e18; //判断是否无解,然而这题其实不用
            x = mul(x, c / d, bg);//快速乘模板
            ans += x * M;//更新前k个方程组的答案
            M *= bg;//M为前k个m的lcm
            ans = (ans % M + M) % M;
        }
        ans = (ans % M + M) % M;
        //if(ans == 0) ans = M;//视情况而定,等于0的时候是因为给定的模数均为1,此时答案应该取任意值均可,而不是只有解 0 ,有时需要特判一下。
        return ans;
    }
};
void solve() {
    int n;
    cin >> n;
    crt::n = n;
    for (int i = 1; i <= n; i++) {
        int x, y;
        cin >> x >> y;
        crt::bi[i] = x;
        crt::ai[i] = y;
    }
    cout << crt::excrt() << '\n';
}
signed main() {
    IOS;
    int t = 1;
    //cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/859595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于新手学习STM32开发应该如何入门?

对于新手来说&#xff0c;学习STM32开发可能会感到困惑&#xff0c;尤其是在拿到开发板后该如何入门。在这里有嵌入式学习路线&#xff0c;毕设&#xff0c;各种项目&#xff0c;需要留个6。以下是部分内容概述&#xff1a;硬件介绍&#xff1a;了解STM32开发板的基本硬件组成和…

Chatgpt API调用报错:openai.error.RateLimitError

Chatgpt API 调用报错&#xff1a; openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…

欧科云链与华为云达成战略合作,开启Web3安全合规新时代

华为云——作为全球增速最快的主流云服务提供商&#xff1b; 欧科云链——作为全球领先的Web3链上数据及合规解决方案提供商&#xff1b; 今天&#xff0c;华为云 与 欧科云链 正式达成战略合作&#xff01; 两者相加在一起&#xff0c;未来又将会碰撞出怎样的火花&#xff1f;…

01-向量究竟是什么?

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 向量究竟是什么 引入一些数作为坐标是一种鲁莽的行为 ——赫尔曼外尔 The introduction of numbers as coordinates is an act of violence - Hermann Weyl 向量的定义 向量&#xff0…

代码随想录算法训练营第50天|动态规划part08|139.单词拆分、关于多重背包,你该了解这些!、背包问题总结篇!

代码随想录算法训练营第50天&#xff5c;动态规划part08&#xff5c;139.单词拆分、关于多重背包&#xff0c;你该了解这些&#xff01;、背包问题总结篇&#xff01; 139. 单词拆分 139. 单词拆分 思路&#xff1a; 单词就是物品&#xff0c;字符串s就是背包 拆分时可以重…

【EI复现】考虑区域多能源系统集群协同优化的联合需求侧响应模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

远程桌面配置指南:保留TCP地址、配置隧道和使用固定TCP地址

远程桌面配置指南&#xff1a;保留TCP地址、配置隧道和使用固定TCP地址 文章目录 远程桌面配置指南&#xff1a;保留TCP地址、配置隧道和使用固定TCP地址第一步&#xff1a;保留TCP地址第二步&#xff1a;为远程桌面隧道配置固定的TCP地址第三步&#xff1a;使用固定TCP地址远程…

10. Docker Swarm(一)

目录 1、前言 2、Docker Swarm体系架构 2.1、简单介绍 2.2、体系架构 3、简单使用 3.1、环境准备 3.2、初始化master节点 3.3、建立worker节点 3.4、查看集群的节点信息 3.5、部署应用 3.5.1、创建Dockerfile文件 3.5.2、构建镜像 3.5.3、将镜像上传到Docker仓库 …

crypto-js中AES的加解密封装

在项目中安装依赖&#xff1a; npm i crypto-js在使用的页面引入&#xff1a; import CryptoJS from crypto-jscrypto-js中AES的加解密简单的封装了一下&#xff1a; //加密const KEY 000102030405060708090a0b0c0d0e0f // 秘钥 这两个需要和后端统一const IV 8a8c8fd8fe3…

栈和队列OJ题讲解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

mysql事务隔离级别详细讲解

mysql事务讲解 MySQL事务处理&#xff08;TransAction&#xff09; 大家好&#xff0c;我是一名热爱研究技术并且喜欢自己亲手实践的博主。 工作这么多年&#xff0c;一直没有深入理解MySQL的事务&#xff0c;因为最近也在面试&#xff0c;准备复习mysql的相关知识&#xff0…

verilog 实现异步fifo

理论知识参考 异步FIFO_Verilog实现_verilog实现异步fifo_Crazzy_M的博客-CSDN博客 代码 /* 位宽8bit, 位深8 */ module async_fifo#(parameter FIFO_DEPTH 8,parameter FIFO_WIDTH 8 ) (input rst_n,input wr_clk,input wr_en,input [FIFO_WIDTH - 1:0…

数据结构之红黑树

二叉搜索树对于某个节点而言&#xff0c;其左子树的节点关键值都小于该节点关键值&#xff0c;右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构&#xff0c;其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的…

C#小轮子 Debug,Release,发布模式如何运行不同的代码

文章目录 前言C#运行模式运行模式介绍三种模式区分代码 前言 编译模式和发布模式的代码不一样是非常正常的。比较常见的是数据库不一样。编译测试数据库和发布真实的数据库地址不一样。 C#运行模式 运行模式介绍 运行模式有三种&#xff1a; Debug 不进行优化&#xff0c;…

逆向破解学习-经典贪吃蛇大作战_1.00

试玩游戏 有支付取消关键字 找静态代码 找到关键字 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d9f3cc57d18477794197ea5fae8c5ba.png Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; import de.r…

MyBatis操作数据库常用用法总结1

文章目录 1.单表查询1.1返回所有的表记录1.2根据id查找结果1.3根据名字查找结果 2.单表修改2.1修改密码 3.单表删除3.1根据id删除信息 4.单表增加&#xff08;根据业务情况返回&#xff09;4.1添加返回影响的行数4.2添加返回影响行数和id 5.多表查询&#xff08;多&#xff09;…

网易云信回声消除量化评估方法

背景 随着现代通信技术的发展&#xff0c;语音通信成为了人们生活中不可或缺的一部分。然而&#xff0c;环境噪声和回声等因素对语音通信质量产生了不良影响&#xff0c;降低了通信效率和用户体验&#xff0c;声学回声消除技术的应用变得越来越重要。如何评估回声消除的效果也变…

详解如何计算字符中的字节数

文章目录 字符概念转义 进制的表示前缀区分后缀区分 什么是ASCII产生表述局限性字节计算 什么是Unicode编码方式UCS-2UCS-4 实现方式UTF的字节序和BOM字节计算 JavaScript中使用字符字符使用缺陷规避字符使用缺陷 MIME 编码Base64编码字节计算QP(Quote-Printable) 总结 字符概念…

进阶-LayUI的基本必知入门教程使用3-layui-laydate选择的值怎么获取?苟日新一刻钟总结反观:

1 效果镇楼&#xff1a; 对于layui框架的刚接触没几天&#xff0c;但是您的年轻同事为啥能搞出来功能啊&#xff01;&#xff1f; 到您就不行了呢&#xff1f; 这就是您对您饭碗的态度了吗&#xff01; 但是&#xff0c;是您尽力了&#xff0c;还能说明啥子问题&#xff1f; 就…

SOLIDWORKS自动标注插件

在设计工作中&#xff0c;三维模型设计好之后&#xff0c;还要创建二维工程图&#xff0c;用来指导加工生产。二维图出图的过程是一个非常枯燥的过程&#xff0c;而且还需要根据公司规范来进行尺寸标注、公差标注等&#xff0c;所以有时候&#xff0c;可能建模只用了几分钟&…