简要题意:
给定一个数列 a 1 , a 2 ⋯ a n − 1 a_1 , a_2 \cdots a_{n-1} a1,a2⋯an−1,求 任意一个满足以下条件的长度为 n n n 的质数数列 ans \text{ans} ans:
ans i × ans i + 1 = a i \text{ans}_i \times \text{ans}_{i+1} = a_i ansi×ansi+1=ai
本题是某洛谷公开赛 T 1 T1 T1,有一定思维难度。
前记
本人 193 m s 193ms 193ms 的代码截止 2020.5.5 12:00 \text{2020.5.5 12:00} 2020.5.5 12:00 排名第一,效率最高。 如果不开火车头优化就屈居第三了 (实际上估计也 不太 会有人能超过它了,除非是变态卡常)
下面的 m m m 指的是:
m = max i = 1 n a i m = \max_{i=1}^n a_i m=i=1maxnai
并且,各算法对应的数据范围没有下限是因为不存在特殊情况,特此说明。
算法一
对于 20 % 20 \% 20% 的数据, n ≤ 5 n \leq 5 n≤5, m ≤ 10 m \leq 10 m≤10.
显然我们可以发现,如果确定了 p 1 p_1 p1,就可以递推出整个数列。
由于 p 1 p_1 p1 只受到 a 1 a_1 a1 的限制(即 p 1 ∣ a 1 p_1 | a_1 p1∣a1),所以我们枚举 a 1 a_1 a1 的 质因子 作为 p 1 p_1 p1,然后递推判断即可。
时间复杂度: O ( T n m ) O(Tn \sqrt{m}) O(Tnm)
解释: T T