POJ2891——Strange Way to Express Integers(一元线性同余方程组)
由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组。
求解
我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现。
对于同于方程组的求解,其实质过程就是对于其中的同余方程依次进行两两合并,然后对最终合并的最终同余方程进行求解即可(如果在合并的过程中发现无解则不需要再隽星合并,因为此时该方程组已经无解)。先给出同余方程合并的推到过程,如图所示:
——转载
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
{if(!b){d=a;x=1;y=0;}else{exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}int main()
{LL i,n,a1,a2,r1,r2,ans,a,b,c,d,x0,y0;while(scanf("%lld",&n)!=EOF){bool ifhave=1;scanf("%lld%lld",&a1,&r1);for(i=1;i<n;i++){scanf("%lld%lld",&a2,&r2);a=a1,b=a2,c=r2-r1;exgcd(a,b,d,x0,y0);if(c%d){ifhave=0;}int t=b/d;x0=(x0*(c/d)%t+t)%t;//保证是最小的正整数r1=a1*x0+r1;a1=a1*(a2/d);}if(!ifhave){printf("-1\n");continue;}printf("%lld\n",r1);}return 0;
}
POJ2891——Strange Way to Express Integers(一元线性同余方程组)相关推荐
- 【数论】同余(四):一元线性同余方程组(两两相消、中国剩余定理)
同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...
- POJ2891 Strange Way to Express Integers
线性同余方程 题目传送门 解线性同余方程的简单应用,注意要把数据读完再输出-1. 代码: #include<cstdio> #include<cstring> #include ...
- 解一元线性同余方程组(详解+例题)
问题描述:给出bi,ni的值,且n1, n2, n3,-, ni两两之间不一定互质,求Res的值? 解:采用的是合并方程的做法. 这里将以合并第一第二个方程为例进行说明 由上图前2个方程得(设k1.k ...
- [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 ...
- POJ2891 Strange Way to Express Integers (扩展欧几里德)
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
- flare-on 7 break第三部分求解:一元线性同余方程
思考的结论:其实这种国际性的逆向比赛,肯定会考一些数学的知识,这个考的是比较基础了,无奈自己没有这个基础. 话说还是flare 7的break这道题,到了最后,第三步验证,函数竟然来到了0x08053 ...
最新文章
- Java项目:学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
- 解决vs2017不能添加引用问题
- leetcode 39. Combination Sum | 39. 组合总和(Java)
- 隐藏滚动条或更改滚动条样式加制作三角形
- wamp+多版本mysql_WampServer下安装多个版本的PHP、mysql、apache图文教程,_PHP教程
- 【报告分享】2021年中国新经济企业500强发展研究报告.pdf(附下载链接)
- tomcat原理及作用,MySQL数据中有很多换行符和回车符
- android monkey 测试方法实践
- 机器学习套路 —— 样本集的拆分(正样本、负样本)
- 【Matlab】Plot的用法详解
- Python和Matlab系统比较
- Himall商城文件帮助类IOHelper(2)
- android 自定义控件实现3D画廊效果
- Python爬虫入门以爬取当当商城图片为例
- 用html做祝福语朋友,对朋友的励志祝福语大全
- Windows mysql secure_file_priv 设置
- java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽
- 3d建模电脑配置要求
- CSS3中的transition和transform属性
- html文字段落加边框线,html给文字加边线框的代码