E - Two Arithmetic Progressions(CodeForces - 710D)(拓展中国剩余定理)
You are given two arithmetic progressions: a1k + b1 and a2l + b2. Find the number of integers x such that L ≤ x ≤ R and x = a1k' + b1 = a2l' + b2, for some integers k', l' ≥ 0.
Input
The only line contains six integers a1, b1, a2, b2, L, R (0 < a1, a2 ≤ 2·109, - 2·109 ≤ b1, b2, L, R ≤ 2·109, L ≤ R).
Output
Print the desired number of integers x.
Examples
2 0 3 3 5 21
3
2 4 3 0 6 17
2 题解:给出两个式子 分别是 a1 * l + b1 、 a2 * k + b2。存在 x 属于 [L,R],是的 x = a1 * l + b1 = a2 * k + b2。
题目思路:一开始暴力计算第一个位于区间内的交点,然后通过数学计算区间内符合条件的x的个数,这个做法 TLE18;
之后听了学长的讲题,一开始不会用拓展中国剩余定理(拓展欧几里得),但是听了学长的思路,我尝试先找第一个公共交点再去计算区间中符合条件的x的个数,这个做法TLE22。
然后我就去学了拓展中国剩余定理(哭。。。。,虽然不会算拓展中国剩余定理的复杂度,但是相比于我的暴力做法肯定要优化的多的。
拓展中国剩余定理,我就不在乱讲了,毕竟自己都不是很会呢。。(哭。。。
贴一篇大佬的博客
https://www.cnblogs.com/zwfymqz/p/8425731.html这个博客讲的很清楚的啦!跟着步骤走基本都能看懂
贴一下题解的代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = ;
ll a1,a2,b1,b2,L,R;
ll ans = ;
int gcd(int a,int b){
if(b == ) return a;
else return gcd(b,a%b);
} int lcm(int a,int b){
return a*b/gcd(a,b);
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if (!b) x=,y=;
else exgcd(b,a%b,y,x),y-=a/b*x;
}
ll inv(ll a,ll b)
{
ll x=,y=;
exgcd(a,b,x,y);
x=(x%b+b)%b;
if (!x) x+=b;
return x;
} int main(){
cin>>a1>>b1>>a2>>b2>>L>>R;
L = max(L,max(b1,b2));// 因为l和k>=0,所以这里更新边界
if(b1 > R || b2 > R){
printf("0\n");
return ;
}//因为 x 必定大于等于max(b1,b2),当 x 大于右边界的时候,无解
if(a1 < a2){
swap(a1,a2);
swap(b1,b2);
}
b1 = b1%a1;
b2 = b2%a2;
ll t = gcd(a1,a2);
if((b2 - b1)%t){
printf("0\n");
return ;
}// (b2 - b1)%t != 0 这种情况下,不存在 x 使得两式相等
ll b = ((inv(a1/t,a2/t)) * (b2 - b1)/t)%(a2/t)*a1 + b1;// 拓展中国剩余定理
ll a = lcm(a1,a2);
if(b < L){
ans = (R - b)/a - (L - b)/a;
if((L - b)%a == ) ans++;
}else if(b > R){
ans = (b - L)/a - (b - R)/a;
if((b - R)%a == ) ans++;
}else ans=(R-b)/a+(b-L)/a+;
printf("%lld",ans);
return ;
}
//2 -5 3 -4 -7 21
有一种情况,就是当两个式子永远都不可能相等的时候,就是 (b2 %a2- b1%a1)%t != 0,这个时候就不会存在解了。拓展中国剩余定理所计算的结果就是0,然而这却不是正确的解,这代表相同点不存在。
一个从很久以前就开始做的梦。
E - Two Arithmetic Progressions(CodeForces - 710D)(拓展中国剩余定理)的更多相关文章
- 拓展中国剩余定理(ex_crt)
一般来讲,crt(中国剩余定理)比较常见,而ex_crt(拓展中国剩余定理)不是很常用 但是noi 2018偏偏考了这么个诡异的东西... 所以这里写一个ex_crt模板 模型: 求一个x满足上述方程 ...
- 拓展中国剩余定理(exCRT)摘要
清除一个误区 虽然中国剩余定理和拓展中国剩余定理只差两个字,但他俩的解法相差十万八千里,所以会不会CRT无所谓 用途 求类似$$\begin{cases}x \equiv b_{1}\pmod{a_{ ...
- C++实现,拓展中国剩余定理——解同余方程组(理论证明和代码实现)
拓展中国剩余定理 前言 记得半年前还写过关于拓展中国剩余定理的博客...不过那时对其理解还不是比较深刻,写的也比较乱. 于是趁学校复习之机,再来重温一下拓展中国剩余定理(以下简称ExCRT) 记得半年 ...
- 2019牛客暑期多校训练营(第十场) Han Xin and His Troop (高精度+拓展中国剩余定理)
题意 裸题 思路 题中的模数之间并不互质,所以应该用拓展中国剩余定理. 但是交上去会炸,__int128过不了,所以用高精度的板子或者java大数都挺好过的. 这里推荐java大数,因为高精度板子用起 ...
- luogu4777[模板]拓展中国剩余定理题解
题目链接 https://www.luogu.org/problemnew/show/P4777 分析 扩展\(CRT\)就是解决模数不互质的情况,说是扩展\(CRT\),其实都是扩欧... 先来考虑 ...
- POJ-2891 Strange Way to Express Integers(拓展中国剩余定理)
放一个写的不错的博客:https://www.cnblogs.com/zwfymqz/p/8425731.html POJ好像不能用__int128. #include <iostream> ...
- Educational Codeforces Round 16 D. Two Arithmetic Progressions (不互质中国剩余定理)
Two Arithmetic Progressions 题目链接: http://codeforces.com/contest/710/problem/D Description You are gi ...
- 中国剩余定理(CRT)及其拓展(ExCRT)
中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...
- 中国剩余定理及其拓展 CRT&EXGCD
中国剩余定理,又叫孙子定理. 作为一个梗广为流传.其实它的学名叫中国单身狗定理. 中国剩余定理 中国剩余定理是来干什么用的呢? 其实就是用来解同余方程组的.那么什么又是同余方程组呢. 顾名思义就是n个 ...
随机推荐
- bmp
function GetNumberBuffer(cZi: string; cwidth, cheight: Integer; FontName: string; bold, italic: Bool ...
- scala 语言特性
Scala 语言特性 Unit 表示无值, 等价于java, C++中的void Null 表示空值或空引用 Nothing 所有其他类型的子类型, 表示没有值 Any 所有类型的超类, 任何实例都属 ...
- 备份CSDN
说明:https://blog.csdn.net/Feynman1999/article/details/87908082 源码:https://github.com/Feynman1999/CSDN ...
- 【转载】WebDriver拾级而上·之零 WebDriver理论
Selenium2.0 = Selenium1.0 + WebDriver(也就是说Selenium2.0合并了这两个项目) Selenium1.0可以使用任何编程语言,但是有个先决条件就是必须支 ...
- 编程入门-Eclipse基本使用
编程入门-Eclipse基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置Eclipse的基本参数 1>.修改Eclipse默认的文件编码为"utf- ...
- 使用Redis SortedSet实现增量更新
导读:前段时间有个需求是提供一个接口供客户端增量更新数据,当有数据被删除了以后客户端也需要感知到,并且要支持一定并发: 关键词:高并发,增量更新 前言 何谓增量更新,顾名思义就是只更新变化的部分,这样 ...
- UVA_12697 满足条件的最短连续和 线段树维护
好印象深刻的题,前天选拔赛给跪了.怪我这种关键题没敲出来. 题意很简单,给你一串无规则的数列,再给个m值,求出满足 数列和>=m的长度最小的连续子串...确实一开始卡住了,因为看数据肯定是nlo ...
- css笔记01
CSS样式(Cascading Style Sheets) 表格布局缺陷: 嵌套太多,一旦顺序错乱页面达不到预期效果 表格布局页面不灵活,动一块整个布局全都要变 语法: 在style标签中 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring自动装配Bean
除了使用 XML 和 Annotation 的方式装配 Bean 以外,还有一种常用的装配方式——自动装配.自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间 ...
- Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并主线程中更新UI,通过AsyncTask可以更加方便执行后台任务以及在主线程中访问UI ...