思路

中国剩余定理 + 快速乘

题目要求找到最小的 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. Shell基础命令之echo
  2. 查看MYSQL数据库中所有用户及拥有权限
  3. JavaIO流(2)--IO流原理、流的分类及节点流文件流操作
  4. python安装mysqlclient_Python-安装mysqlclient(MySQLdb)
  5. C++学习之路 | PTA乙级—— 1001 害死人不偿命的(3n+1)猜想 (15分)(精简)
  6. jupyter 无法提示代码,报错TypeError: __init__() got an unexpected keyword argument ‘column‘
  7. 苹果AirPods有望在年末推出新款产品 或将支持防水功能
  8. 60-100-340-使用-DataSource-hive相关-Flink加载hive数据源
  9. 时尚精美电商专题首页设计PSD分层模板资源
  10. 解决Element的 InfiniteScroll 无限滚动组件报错
  11. java编程题50道
  12. XP系统服务启动设置优化
  13. android room 简书,android Room库使用问题
  14. 学校计算机房电脑桌,学校机房用双机位电脑桌的制作方法
  15. 在Unity中实现简单的动画转场
  16. 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
  17. Java word转pdf 精确获取文件页数(jacob)
  18. 专业的个人记帐软件 爱上记帐 1.0.1
  19. 统计中的f检验和t检验的区别
  20. 启动rabbitmq,遇到发生系统错误2和发生系统错误5的解决方法

热门文章

  1. MySQL高频面试题(最新版)
  2. MYSQL注入获取web路径的方法
  3. 【BAT面试必备】一致性哈希算法原理 一文吊打面试官
  4. Xamarin.iOS 相机与相册的基本使用
  5. Linux九阴真经之大伏魔拳残卷6 keepalived
  6. 4月数据库排行榜出炉 前三名依然坚挺
  7. CodeSmith基础教程
  8. Python之构造函数
  9. 一个人没有出息的9大根源
  10. JS中定义一个二维数组