思路

中国剩余定理 + 快速乘

题目要求找到最小的 n ∈ N n\in \N n∈N,满足对于 ∀ i ∈ [ 1 , k ] \forall i\in [1,k] ∀i∈[1,k],有 b i ∣ ( n − a i ) b_i | (n-a_i) bi​∣(n−ai​)

我们试着来转化一下这个式子

b i ∣ ( n − a i ) b_i|(n-a_i) bi​∣(n−ai​),也就是说 ( n − a i ) (n-a_i) (n−ai​)在模 b i b_i bi​意义下同余 0 0 0,即 n − a i ≡ 0 ( mod  b i ) n - a_i\equiv 0(\text{mod}\ b_i) n−ai​≡0(mod bi​),进一步转化,就能得到 n ≡ a i ( mod  b i ) n\equiv a_i(\text{mod}\ b_i) n≡ai​(mod bi​)

这个式子是不是很眼熟?没错,就是中国剩余定理的式子,因为题目中已经保证了 b i b_i bi​两两互素,所以我们就可以直接套中国剩余定理的板子了

设 N = ∏ i = 1 n b i N=\prod_{i=1}^nb_i N=∏i=1n​bi​, M i = N / b i Mi=N/b_i Mi=N/bi​, x i x_i xi​是线性同余方程 M i x i ≡ 1 ( mod  b i ) M_ix_i≡1(\text{mod}\ b_i) Mi​xi​≡1(mod bi​)的一个解(即 M i Mi Mi的逆元),最后的解即为 a n s = ∑ i = 1 k a i M i x i ans=\sum\limits_{i=1}^ka_iM_ix_i ans=i=1∑k​ai​Mi​xi​

那么这样就完了嘛?

此题终结其实不然

这样交上去之后,会发现只有九十分,最后一个点 W A WA WA了,因为这题要用快速乘,于是写上快速乘

那么这样就完了嘛?

此题终结其实也不然

又交上去之后,发现还是九十分,不过这次错的点是第二个了。

这是为什么呢?

看题目条件: ∣ a i ∣ ≤ 1 0 9 ∣a_i∣≤10^9 ∣ai​∣≤109

什么意思呢?意思就是 a i a_i ai​可能是负的!(出题人真是用心良苦

处理的方法就是:快速乘传参时取模

那么这样就完了嘛?

兴冲冲的交上去,终于满分了,没错,这次真完了

代码

/*
Author:loceaner
中国剩余定理板子题
*/
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define int long long
using namespace std;const int A = 5e5 + 11;
const int B = 1e6 + 11;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;inline int read() {char c = getchar(); int x = 0, f = 1;for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;for( ; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);return x * f;
}int n, N = 1, b[A], a[A], ans;inline int mul(int n, int m, int mod) {int res = 0;while (m) {if (m & 1) res = (res + n) % mod;n = (n + n) % mod, m >>= 1;}return res;
}inline void exgcd(int a, int b, int &x, int &y) {if (!b) x = 1, y = 0;else exgcd(b, a % b, y, x), y -= a / b * x;
}signed main() {n = read();for (int i = 1; i <= n; i++) a[i] = read();for (int i = 1; i <= n; i++) b[i] = read(), N *= b[i];for (int i = 1; i <= n; i++) {int x, y, Mi = N / b[i];exgcd(Mi, b[i], x, y);ans = (ans + mul(mul(Mi, x % N + N, N), a[i] % N + N, N) % N + N) % N; }cout << ans % N << '\n';return 0;
}

洛谷 P3868 [TJOI2009]猜数字【中国剩余定理】相关推荐

  1. P3868 [TJOI2009]猜数字

    传送门 中国剩余定理模板题(关于中国剩余定理,我是在这里学的:传送门) 由题可知: n-ai=k*bi  --->  n-ai ≡ 0 (mod bi)  --->  n≡ai (mod ...

  2. P3868 [TJOI2009]猜数字(CRT板子)

    题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...

  3. [洛谷P3292] [SCOI2016]幸运数字

    洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...

  4. [TJOI2009] 猜数字

    传送门:>Here< 题意:中国剩余定理 解题思路 本来想练CRT模板的,就不多说了.结果莫名被最后一个点卡成负数.我开long long了? 原来是要快速乘.蒟蒻从没用过快速乘,因此学习 ...

  5. 洛谷——P1427 小鱼的数字游戏

    P1427 小鱼的数字游戏 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 a_ia**i(长度不一定,以 00 结束),记住了然后反着念出来(表示结束的数字 00 就不要念出来了) ...

  6. 数组——洛谷#P1427 小鱼的数字游戏(Python实现)

    题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...

  7. 洛谷[P1427]小鱼的数字游戏

    题目传送门OvO 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过 2 32 − 1 2^{32}-1 232−1),记住了然后反 ...

  8. 洛谷(小鱼的数字游戏、进制转换、Cableway、Quasi Binary)

    小鱼的数字游戏: 代码: #include<iostream> #include<cstring> #include<algorithm> using namesp ...

  9. 洛谷 - P1829 - Crash的数字表格 - 莫比乌斯反演

    求: \(S(n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 显然: \(S(n,m)=\sum\limits_{i=1}^{n}\ ...

最新文章

  1. 海思3559与全志a83t比较
  2. 【机器学习入门到精通系列】异常检测
  3. python手机版安卓-当python遇到Android手机 那么,万物皆可盘
  4. pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)...
  5. java时间日期工具类_java日期处理工具类
  6. Python Series库Api整理
  7. Git 笔记——如何处理分支合并冲突
  8. 来聊聊WWDC 苹果大会上的那些黑科技
  9. CentOS+Subversion 配置Linux 下 SVN服务器
  10. C++ char/byte 转16进制字符串
  11. C语言 陶陶摘苹果 数组,陶陶摘苹果-题解(C++代码)
  12. BigBlueButton 2.2安装指南
  13. 学习分布式存储应该从哪几方面着手?
  14. zookeeper-选举流程
  15. 中国移动“梧桐杯”大数据应用创新大赛智慧金融初赛TOP1开源
  16. 遥控视频小车实际应用效果以及功能实现
  17. 前端如何调用微信授权登录
  18. oppo提前批Android开发岗面经(附问题答案)
  19. 云计算的云是指什么?最简单的解释是什么?
  20. win11微软新系统全新效果曝光

热门文章

  1. 沐歌保健院线上预约按摩系统的设计与实现(论文+源码)_kaic
  2. 软件设计师——软件工程
  3. python 调试器_如何使用Python调试器
  4. 使用Colaboratory的免费GPU训练神经网络
  5. Springboot毕设项目基于Springboot的漫画网站mw0s4(java+VUE+Mybatis+Maven+Mysql)
  6. Linux 基本命令及用法,Linux常用命令详解和用法整理 新手站长必备知识要点
  7. 代码注入(web安全入门)
  8. 学习记录:py3百度翻译接口
  9. Android关于小米相册悬浮标题栏、冻结标题栏的实现方式(嵌套型RecycleView)
  10. 计算点到直线方程的投影点坐标