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

网站建设公司河南郑州/能搜任何网站的浏览器

网站建设公司河南郑州,能搜任何网站的浏览器,网站推广效益怎么分析,合肥网站建设培训班什么是中国剩余定理呢? 当m1,m2,....mn的值两两互质的时候,求x的值。 假设 M m1 * m2 * ... * mn 在设 Hi M / mi (也就是除了mi之外,其他的m值的乘积) 由于m1,m2...mn两两互质, 所以Hi与mi是互质的。 那…

什么是中国剩余定理呢?

 当m1,m2,....mn的值两两互质的时候,求x的值。

假设 M = m1 * m2 * ... * mn

在设 Hi = M / mi (也就是除了mi之外,其他的m值的乘积)

由于m1,m2...mn两两互质, 所以Hi与mi是互质的。

那么Hi ^ (-1)  也就是 Hi 关于 mod mi 的逆元是存在的。

(使用扩展欧几里得算法进行求解这个逆元,因为当下只有Hi,与mi互质这一个条件

也就是  Hi * (Hi ^ -1)  + y * mi = 1  使用扩展欧几里得算法将x求出,也就是Hi ^ -1)

则: x = a1 * H1 * ( H1 ^ -1) + a2 * H2 * (H2 ^ -1) + ... + ak * Hk * (Hk ^ -1).  (这个就是中国剩余定理的一个通用公式,但是应用的前提条件是,m1,m2,m3...两两互质。)

以第一个方程 mod m1为例:

H1 * H ^( -1) mod m1 == 1 , 而其他的H2,H3....中都包含了m1,所以mod m1为0.

所以 x = a1 * a mod m1 . 成立。

那么问题来了:

如果m1,m2,m3...不两两互质呢。那就要用到数学归纳法的思想,将两两方程不断合并,最后就变为了一个方程了。

还是这些方程,但是现在没有m1,m2...两两互质。该怎么办呢?

先取出前面两个方程出来。并换一种表现形式

x == k1 * m1 + a1 

x == k2 * m2 + a2

那么也就是说明了

k1 * m1 + a1 == k2 * m2 + a2

--->k1 * m1 - k2 * m2 == a2 - a1

这就可以用扩展欧几里得的方式求解出一组k1,k2出来。

但是要存在有解 则 (a2 - a1) 能够整除 gcd(m1,m2);

 所以真正的k1就是 k1 =k1 *  (a2 - a1) / gcd(m1,m2);

而k1的通解是, k1 + k * (m2 / gcd(m1,m2));

则将k1的通解带入到方程中,就可以得到一个新的关于x的方程

x == ( k1 + k * (m2 / gcd(m1,m2))  ) * m1 + a1;

x == k1 * m1 + a1  + k * m1 * m2 / gcd(m1,m2);

x == k1 * m1 + a1 + k * lcm【m1,m2】 (lcm【m1,m2】为m1,m2的最小公倍数)

而k1 * m1 + a1 就是 新的 a1(而这个k1 * m1 + a1不就是我们每次以第一个公式作为合并基准的公式嘛) ,  而 lcm【m1,m2】就是新的m1 

而这个x 就是前两个方程合并 后 得到的一个新的方程。

同样,新的方程 和 第三个方程合并又可以将两个方程变为一个方程,以此类推,直到最后只剩下一个方程。

这个m1,m2,a1,k1已经在合并过程中不断发生了变化。

x == k1 * m1 + a1 + k * lcm【m1,m2】

得到的最后一个这个公式的m1和a1

实际上就是 x mod m1 == a1的含义了。

而我们要求出这个最后一个公式的其中一个满足条件的x.

所以取 x = ( a1 % m1 + m1) % m1即可。 

题目链接:https://www.acwing.com/problem/content/206/

题目:

给定 2n个整数 a1,a2,…,an 和 m1,m2,…,mn,求一个最小的非负整数 x,满足 ∀i∈[1,n],x≡mi(mod ai)。

输入格式

第 1 行包含整数 n。

第 2…n+1 行:每 i+1 行包含两个整数 ai和 mi,数之间用空格隔开。

输出格式

输出最小非负整数 x,如果 x不存在,则输出 −1。
如果存在 x,则数据保证 x 一定在 64 位整数范围内。

数据范围

1≤ai≤2e31 - 1,
0≤mi<ai
1≤n≤25

输入样例:

2
8 7
11 9

输出样例:

31

分析:

按照上面m1,m2,m3...不一定互质的分析来就可以了。

但是要注意,此题是 

不要和上面的m和a混淆了。 

最后此题会变为:

x == k1 * a1 + m1 + k * lcm[a1,a2]

新的m1 为 k1 * a1 + m1

新的a1为 lcm[a1.a2];

代码实现:

# include <iostream>
using namespace std;int n;long long exgcd(long long a ,long long b , long long & x , long long & y)
{if(!b){x = 1 , y = 0;return a;}else{int t = exgcd(b,a % b , y , x);y -= a / b * x;return t;}
}int main()
{scanf("%d",&n);bool flag = true;long long a1,m1,a2,m2;scanf("%lld %lld",&a1,&m1); // 先存入第一个方程,我们的合并是通过两个两个不断和并为1个最后化为一个方程for(int i = 2 ; i <= n ; i++){scanf("%lld %lld",&a2,&m2);long long k1,k2;long long t = exgcd(a1,a2,k1,k2);if((m2 - m1) % t)  // 无解{flag = false;break;}else{k1 = (m2 - m1) / t * k1; //真正的k1,k2k2 = (m2 - m1) / t * k2; // 而k2实际上用不到k1 = ( k1 % (a2 / t) + a2 / t ) % (a2 / t); // 最小的正整数k1, 为了防止其爆long long,k1尽量取小m1 = k1 * a1 + m1;a1 =  a1 / t * a2; // 新的a1为 a1,a2的最小公倍数}}if(flag){printf("%lld\n",(m1 % a1 + a1) % a1);}else{printf("-1\n");}return 0;
}
http://www.lbrq.cn/news/1454581.html

相关文章:

  • 那个公司做的外贸网站好/it培训学校it培训机构
  • 房地产集团网站建设方案/张掖seo
  • 网站制作的/什么是口碑营销
  • 免费网站下载app软件/推广网站哪个好
  • 可以做微信游戏的网站有哪些/网络推广工作是做什么的
  • wordpress多站点功能/网课培训机构排名前十
  • 武汉专业网站做网页/推广自己的网站
  • 大连建设工程网站/清远新闻最新
  • 学校门户网站建设方案/百度网盘资源共享
  • 网站切换中英文/公司建网站多少钱
  • 如何做正规的采集网站/百度链接收录
  • 镇江关键词优化如何/盛大游戏优化大师
  • 常州市天宁区建设局网站/网站关键词优化排名外包
  • 独立ip做担保网站会被360拦截吗/百度推广有哪些推广方式
  • 网站底部代码大全/放单平台大全app
  • 建筑工程联系方式公开网/seo基础优化包括哪些内容
  • 做网站开发需要的笔记本配置/一个平台怎么推广
  • 英语不好的做网站运营可以吗/江苏seo技术教程
  • 做网站开发的提成多少钱/今日网站收录查询
  • 跨境电商seo/百度搜索优化软件
  • html5 wap网站模板/sem代运营
  • 做淘宝图片的网站/凤山网站seo
  • 张家港网站建设做网站/百度图片搜索入口
  • 自己建的网站可以用笔记本做服务器吗/上海网站建设制作
  • 怎么用ps做京东网站模板/杭州seo 云优化科技
  • 济南商城网站制作/石家庄百度快速排名优化
  • 如何在自己的服务器上做网站/在线查询网站收录
  • 贵州省住房和城乡建设厅网/搜索引擎优化简称seo
  • 单位加强网站建设/2345网址导航大全
  • 网站会员注册系统怎么做视频/seo关键词查询
  • 音视频学习笔记
  • Linux U盘识别问题排查指南
  • Web 开发 12
  • Vim编辑器详解:从入门到高效使用
  • 【MySQL】增删改查操作 —— CRUD
  • ADB 查看 CPU 信息、查看内存信息、查看硬盘信息