题目大意

就是模板。。。没啥好说的

思路

因为模数不互质,所以直接中国剩余定理肯定是不对的
然后就考虑怎么合并两个同余方程
\(ans = a_1 + x_1 * m_1 = a_2 + x_2 * m_2\)
\(x_1 * m_1 + x_2 * m_2 = a _ 2 - a _ 1\)(因为正负号没影响嘛)
然后就可以exgcd解出来\(x_1, x_2\), 最后就可以得到\(x' = a_1 + x_1 * m_1, m' = lcm(m_1, m_2)\)
然后就不停合并就可以了


//Author: dream_maker
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
//----------------------------------------------
//typename
typedef long long ll;
//convenient for
#define fu(a, b, c) for (int a = b; a <= c; ++a)
#define fd(a, b, c) for (int a = b; a >= c; --a)
#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)
//inf of different typename
const int INF_of_int = 1e9;
const ll INF_of_ll = 1e18;
//fast read and write
template <typename T>
void Read(T &x) {bool w = 1;x = 0;char c = getchar();while (!isdigit(c) && c != '-') c = getchar();if (c == '-') w = 0, c = getchar();while (isdigit(c)) {x = (x<<1) + (x<<3) + c -'0';c = getchar();}if (!w) x = -x;
}
template <typename T>
void Write(T x) {if (x < 0) {putchar('-');x = -x; }if (x > 9) Write(x / 10);putchar(x % 10 + '0');
}
//----------------------------------------------
const int N = 1e5 + 5;
ll n, a[N], m[N];
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;
}
void exgcd(ll a, ll b, ll &x, ll &y) {if (!b) {x = 1, y = 0; return;}exgcd(b, a % b, y, x);y -= a / b * x;
}
ll exCRT() {ll M = m[1], A = a[1];fu(i, 2, n) {ll d = gcd(M, m[i]), x, y;if ((a[i] - A) % d) return -1;exgcd(M, m[i], x, y);x *= (a[i] - A) / d;x = (x % (m[i] / d) + (m[i] / d)) % (m[i] / d);A += M * x, M = M / d * m[i], A %= M; }if (A < 0) A += M;return A;
}
int main() {while (scanf("%lld", &n) != EOF){fu(i, 1, n) Read(m[i]), Read(a[i]);Write(exCRT());putchar('\n');}return 0;
}

转载于:https://www.cnblogs.com/dream-maker-yk/p/9832310.html

POJ2891 Strange Way to Express Integers【扩展中国剩余定理】相关推荐

  1. POJ2891 Strange Way to Express Integers (扩展欧几里德)

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia 题目大意 求解一组同余方程 x ≡ r1 (mod a1) x ≡ r2 (mod a2) x ≡ r ...

  2. POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)

    题目链接:http://poj.org/problem?id=2891 题目大意: 很好的一道题,解同余式组: x = r1 (mod m1) x = r2 (mod m2) -- x = rp (m ...

  3. 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 ...

  4. [POJ2891] Strange Way to Express Integers

    题目描述 FJ正在读佳佳写的一本书,书中描述一种表示非负整数的方法:选择k个不同的正整数a1,a2,-,ak,对于某个整数m分别对ai求余对应整数ri,如果适当选择a1,a2,-,ak,那么整数m可由 ...

  5. POJ2891 Strange Way to Express Integers

    线性同余方程 题目传送门 解线性同余方程的简单应用,注意要把数据读完再输出-1. 代码: #include<cstdio> #include<cstring> #include ...

  6. POJ2891——Strange Way to Express Integers(一元线性同余方程组)

    由若干个一元线性同余方程组构成的方程组,叫做一元线同余方程组. 求解 我们可以将其统一划成a*x ≡ b(mod m)的形式,这样有利于算法的实现. 对于同于方程组的求解,其实质过程就是对于其中的同余 ...

  7. 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

    虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...

  8. [POJ 2891] Strange Way to Express Integers

    Description 给定 k 个同余方程组,求出满足条件的最小正整数 x,或者无解输出 -1. Solution 注意到模数不一定互质,所以中国剩余定理不能用 嗯有请扩展中国剩余定理 定理证明就不 ...

  9. 中国剩余定理(CRT)扩展中国剩余定理(exCRT)

    前言 中国剩余定理(也叫孙子定理)并不是很复杂,由于最近用到了,以前学的时候还不写博客,所以现在补一下 中国剩余定理(CRT) 问题 给出nnn个同余方程 x≡a1(modp1)x≡a2(modp2) ...

最新文章

  1. [Android开发常见问题-12] Android开发中debug.keystore如何使用。
  2. python如何进行数据抓取_如何进行手机APP的数据爬取?
  3. Qt入门(10)——调试技术
  4. python 基本操作 多维数组 循环
  5. linux系列(二十):find命令
  6. 把我的爱送给你――C#3.5(这题目似乎写错了)
  7. jquery打造一款侧边弹出的垂直导航
  8. python记录(4)- lxml模块创建xml文件
  9. html中使用style设置背景
  10. OpenWrt 编译分割
  11. 【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】
  12. 电商行业用户画像分析案例
  13. 2019年通信工程考研初试经验帖(366分)
  14. Java图像识别技术:Test4J
  15. Django测试文件——tests.py
  16. Byte measurements
  17. pdf 改变页面大小 python_用Python开发PDF编辑器,实现PDF页面提取,页面合并与替换...
  18. ps2017 cc 打印排版一寸照片
  19. matlab在频率特性法中的应用实验目的,matlab软件实习报告
  20. 高鸿业西方经济学微观部分第7版笔记

热门文章

  1. zoj 1438 - Asteroids!
  2. Collection集合--ArrayList源码读后感总结
  3. 抖音测试心理是什么软件,实用心理测试大全抖音版-抖音实用心理测试大全小游戏官方版预约 v1.0-友情手机站...
  4. 中间表增加额外字段_知识分享 I 这样显示报表筛选字段 你学会了吗
  5. 006-SDK框架之LYWSDKInterfaceProtocol.h
  6. html桌面卡牌效果,html+css实现响应式卡片悬停效果
  7. 用计算机语言编写的完成一定功能,C+的+预备知识.ppt
  8. 是 String , StringBuffer 还是 StringBuilder ?
  9. 06day 03cdbpdb也成为 多租户环境
  10. 0基础入门,如何快速上手Python?