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个 ...
随机推荐
- JAVA - SpringBoot项目引用MyBatis操作数据库
JAVA - SpringBoot项目引用MyBatis操作数据库 1. 创建SpringBoot项目,参考:https://www.cnblogs.com/1285026182YUAN/p/1232 ...
- python连接 ssh
import paramiko # private = paramiko.RSAKey.from_private_key() 秘钥 trans = paramiko.Transport((" ...
- POJ 2251 Dungeon Master(三维空间bfs)
题意:三维空间求最短路,可前后左右上下移动. 分析:开三维数组即可. #include<cstdio> #include<cstring> #include<queue& ...
- ABP .NET CORE 连接mysql
1.安装mysql程序集,在项目XXX.EntityFrameworkCore下面添加程序集 pomelo.entityframeworkcore.mysql pomelo.entityframewo ...
- Win7 node多版本管理gnvm采坑记录
采坑描述:下载新node版本及切换node失败 解决:1.要用管理员权限启动cmd:2.确保node是空闲的 Gnvm下载地址: 32-bit | 64-bit Github 1.下载之后为 得到一个 ...
- java内存机制 垃圾回收
gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...
- 体验京东云 Serverless+AI 人脸属性识别
云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0对无服务器计算作了如下定义: Server ...
- 学习spring的第一天
1.首先在maven repository中找到Spring Context依赖添加进模块 2.配置xml,resources右键new→xml configuration file→Spring C ...
- Git--git log
参考 https://www.cnblogs.com/bellkosmos/p/5923439.html https://www.cnblogs.com/mkl34367803/p/9219913.h ...
- CountUp.js 数字跳转效果小插件
CountUp.js 实现数字跳转效果的小插件 //调用方法 const easingFn = function (t, b, c, d) { var ts = (t /= d) * t; var ...