声明:
题目来源:https://www.luogu.com.cn/problem/P3868
题目描述
现有两组数字,每组 k k k 个。
第一组中的数字分别用 a 1 , a 2 , … , a k a_{1}, a_{2}, \ldots, a_{k} a1,a2,…,ak 表示,第二组中的数字分别用 b 1 , b 2 , … , b k b_{1}, b_{2}, \ldots, b_{k} b1,b2,…,bk 表示。
其中第二组中的数字是两两互素的。求最小的 n ∈ N n \in \mathbb{N} n∈N ,满足对于 ∀ i ∈ [ 1 , k ] \forall i \in[1, k] ∀i∈[1,k] ,有 b i ∣ ( n − a i ) b_{i} \mid\left(n-a_{i}\right) bi∣(n−ai) 。
输入格式
第一行一个整数 k k k 。
第二行 k k k 个整数,表示: a 1 , a 2 , … , a k a_{1}, a_{2}, \ldots, a_{k} a1,a2,…,ak 。
第三行 k k k 个整数,表示: b 1 , b 2 , … , b k b_{1}, b_{2}, \ldots, b_{k} b1,b2,…,bk 。
输出格式
输出一行一个整数,为所求的答案 n n n 。
输入输出样例
输入 #1
3
1 2 3
2 3 5
输出 #1
23
说明/提示
【数据范围】
对于 100 % 100 \% 100%的数据, 1 ⩽ k ⩽ 10 , ∣ a i ∣ ⩽ 1 0 9 , 1 ⩽ b i ⩽ 6 × 1 0 3 , ∏ i = 1 k b i ⩽ 1 0 18 1 \leqslant k \leqslant 10,\left|a_{i}\right| \leqslant 10^{9}, 1 \leqslant b_{i} \leqslant 6 \times 10^{3}, \prod_{i=1}^{k} b_{i} \leqslant 10^{18} 1⩽k⩽10,∣ai∣⩽109,1⩽bi⩽6×103,∏i=1kbi⩽1018 。
每个测试点时限 11 秒。
注意:对于 C/C++ 语言,对 位整型数应声明为 long long。
若使用 scanf,printf 函数(以及 fscanf,fprintf 等),应采用 %lld 标识符。
题解思路:
引理1:拓展欧几里得求乘法逆元。
a s s u m e assume assume t h a t that that a a − 1 ≡ 1 m o d b a a^{-1} \equiv 1 \bmod b aa−1≡1modb
a a − 1 + b y = 1 a a^{-1}+b y=1 aa−1+by=1. a s s u m e assume assume t h a t that that x = a − 1 . x=a^{-1}. x=a−1.
a x + b y = 1. a x+b y=1. ax+by=1.