【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)...
题意:Elina看一本刘汝佳的书(O_O*),里面介绍了一种奇怪的方法表示一个非负整数 m 。也就是有 k 对 ( ai , ri ) 可以这样表示——m%ai=ri。问 m 的最小值。
解法:拓展欧几里德求解同余方程组的最小非负整数解。(感觉挺不容易的......+_+@)
先看前2个关系式: m%a1=r1 和 m%a2=r2 →
m-a1*x=r1 和 m-a2*y=r2 →
m=a1*x+r1 和 m=a2*y+r2
a1*x-a2*y=r2-r1 →
于是用拓展欧几里德求得一个满足这2个关系式/方程联立的最小非负整数解 (x',y')。
那么存在一个: m'-a1*x'=r1 和 m'-a2*y'=r2 →
m'=a1*x'+r1=a2*y'+r2 →
m' %a1=m%a1 和 m' %a2=m%a2 →
m' %lcm(a1,a2)=m%lcm(a1,a2) →
m=m'+k*lcm(a1,a2) →
m=(a1*x'+r1)+lcm(a1,a2)*k →
m= r' + a' *x →
......
m=ak*y'+rk+lcm(ak-1,ak)*k →
而又 m=ak*y'+rk , r'=ak*y'+rk
所以 m=r'
接着继续将这个式子与 m=a3*y+r3 联立,同样地得到一个新的方程,再一直继续联立下去,由于 x 保证了尽量下,最后的 r' 就是尽量小的答案。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 typedef long long LL; 7 8 LL mabs(LL x) {return x>0?x:-x;} 9 LL exgcd(LL a,LL b,LL& x,LL& y) 10 { 11 if (!b) {x=1,y=0; return a;} 12 LL d,tx,ty; 13 d=exgcd(b,a%b,tx,ty); 14 x=ty,y=tx-(a/b)*ty; 15 return d; 16 } 17 int main() 18 { 19 LL k; 20 while (scanf("%I64d",&k)!=EOF) 21 { 22 LL aa,rr,a,r; bool ok=false; 23 for (LL i=1;i<=k;i++) 24 { 25 scanf("%I64d%I64d",&aa,&rr); 26 if (ok) continue; 27 if (i==1) a=aa,r=rr; 28 else 29 {//求解同余方程 30 LL d,x,y,t; 31 d=exgcd(a,aa,x,y);//ax-aay=rr-r 有无正负号没有关系 32 if ((rr-r)%d!=0) {ok=true;continue;}//break;} 多组数据要读入完! 33 x=x*((rr-r)/d);//1个解 34 t=mabs(aa/d);//mabs 35 x=(x%t+t)%t;//最小非负整数解 36 37 r=a*x+r,a=a*aa/d;//a=lcm(a,aa)=a*aa/gcd(a,aa)=a*aa/d; 38 } 39 } 40 if (!ok) printf("%I64d\n",r); 41 else printf("-1\n"); 42 } 43 return 0; 44 }
转载于:https://www.cnblogs.com/konjak/p/6063351.html
【poj 2891】Strange Way to Express Integers(数论--拓展欧几里德 求解同余方程组 模版题)...相关推荐
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
- poj 2891 Strange Way to Express Integers 2012-09-05
http://poj.org/problem?id=2891 解线性模方程组. 比较坑爹,数据比较大,很容易溢出. 1 Program poj2891; 2 3 var m:int64; 4 5 a, ...
- poj 2891 Strange Way to Express Integers
题目:http://poj.org/problem?id=2891 思路:扩展欧几里得 #include <cstdio> #include <cstring> #includ ...
- POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)
题目链接:http://poj.org/problem?id=2891 题目大意: 很好的一道题,解同余式组: x = r1 (mod m1) x = r2 (mod m2) -- x = rp (m ...
- [POJ 2891] Strange Way to Express Integers
Description 给定 k 个同余方程组,求出满足条件的最小正整数 x,或者无解输出 -1. Solution 注意到模数不一定互质,所以中国剩余定理不能用 嗯有请扩展中国剩余定理 定理证明就不 ...
- 【poj2891】 Strange Way to Express Integers
poj.org/problem?id=2891 (题目链接) 题意:求解线性同余方程组,不保证模数一定两两互质. Solotion 用exgcd将俩个同余方程合并成一个 如合并n%M=R,n%m=r ...
- [POJ2891] Strange Way to Express Integers
题目描述 FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,-,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,-,ak,那么整数m可由 ...
- POJ2891 Strange Way to Express Integers【扩展中国剩余定理】
题目大意 就是模板...没啥好说的 思路 因为模数不互质,所以直接中国剩余定理肯定是不对的 然后就考虑怎么合并两个同余方程 \(ans = a_1 + x_1 * m_1 = a_2 + x_2 * ...
- poj-2891(Strange Way to Express Integers)--中国剩余定理扩展欧几里得
题意:找到一个m,使得m%ai=ri,并且这个m最小 m = a1*x + r1; m = a2*y + r2; 可得:a1*x - a2*y = r2 - r1 可得:a1*x ≡ r2-r1(mo ...
最新文章
- 封闭已久的智能驾驶系统,在云栖大会上,被敲开一个裂缝
- 检查是否有负循环(Bellman Ford, Floyd-Warshall)
- 【Efficient-Net】基于Efficient-Net效滤网的目标识别算法的MATLAB仿真
- SpringBoot(二)——实现一个基本的小网站
- TIME_WAIT简介
- 【城市沙龙】LiveVideoStack Meet|南京:互联网沙漠的音视频发展
- idea中运行maven安装jar包到本地仓库跳过test
- leetcode题目:第 k 个数
- avs v7.0 php,AVS v7.0 – PHP在线视频上传分享程序
- 微波接力通信、卫星通信、无线移动通信
- 郑州大学linux试题,郑州大学Linux讲义 PPT
- SEO搜索引擎优化二十八条经验建议
- 三类医疗器械ERP系统软件排行榜
- ffmpeg推流和拉流rtsp
- sis 最新_传统SIS系统面临考验——“可持续的安全仪表系统”来袭
- ecshop 模版写php,ecshop 模板直接使用运算符
- 0.1+0.2 等于 0.3 吗?(数字相加结果有无限小数的原因及解决方式)
- 【BZOJ 4399】魔法少女LJJ
- mc 手游无限挑战服务器,新版本的诱惑 弹弹堂手游无限挑战你敢来吗
- HCCG-CycleGAN网络结构、原理、以及相关代码--Generating Handwritten Chinese Characters using CycleGAN
热门文章
- python类的构造函数是_python类(class)的构造函数、初始化函数、析构函数
- java android 服务器_Android/Java从服务器端下载图片
- linux基础实验报告6,Linux实验报告6参考答案.doc
- java long 二进制输出格式_算法:java打印int类型的二进制格式
- kvm虚拟机设置万兆网卡_kvm已经设置桥接网卡的虚拟机无法连接宿主机?
- dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」
- 理解JavaScript中的多态
- .net ef 字段不区分大小写_第六节:框架搭建之EF的Fluent Api模式的使用流程
- mysql udf http,mysql下mysql-udf-http效率测试小记
- html代码格式化nodejs,使用Node编写的Sublime代码格式化工具插件(HTML/CSS/JS)