洛谷 [P2651] 添加括号III

114 阅读1分钟

题目链接

P2651 添加括号III - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题意

定义这样的一个序列:

  • A = a1a2a3......ana_1 a_2 a_3 ...... a_n 它们代表 a1/a2/a3...../ana_1 / a_2/a_3 ..... /a_n 想通过在元素之间添加一些括号,使得这个式子 算出来的是个整数.

解法

通过观察我们可以发现,无论如何添加括号 a1a_1 总是分子a2a_2 一定是分母 , a3,a4.......ana_3 , a_4 ....... a_n 算出来的 一定要是一个整数 ,为什么呢? 我们将分母消除到最少了 , 更多必然无利且可能有害, 那么我们可以变形一下式子。

a1a3a4......an/a2 a_1 * a_3 * a_4 ...... a_n / a_2

这里说明如何将a3a4....ana_3 a_4 .... a_n 转化到分子上面去

a1a2.....an \frac{a_1}{\frac{a_2}{\frac{.....}{a_n}}}

我们将 a1/a2/a3...../an1a_1 / a_2 / a_3 ..... /a_{n - 1} , 将前面看成一个整体 x/an1/anx / a_{n - 1} / a_n , 此时 ana_n 就被乘到分子上去了。 即下式 xan/an1x * a_n / a_{n - 1} 我们只需要屡试不爽的使用整体角度,将分母的分母翻上去即可 , 最后就可以得到a1a3a4......an/a2a_1 * a_3 * a_4 ...... a_n / a_2

两种做法

  • 高精度:可以将前面一堆数乘起来,但是考虑精度问题,需要使用高精度。如果您愿意的话,那么请随意。

  • gcd : 我们发现如果满足条件的话 ,a1a3.....ana_1 * a_3 ..... a_n 一定是 a_2 的正整数倍 i.e.xa2,xZ\*i.e. x * a_2 , x∈{\Z^\*}, 那么这一堆乘积里面一定有关于 a2a_2所有相关质因数 而这些质因数都一定来自 a1a3.....ana_1 a_3 ..... a_n , 那么我们只需要每次求出 gcd(a2,ai)i(1,3,4.....)gcd(a_2 , a_i) i ∈(1 , 3 , 4 .....) , 再从a2a_2去掉这个质因数的相关部分即可。

    相当于每次求出两个数质因数的相交部分,从 a2a_2 中去掉 , 如果a2a_2 可以整除 a1a3.....ana_1 * a_3 ..... a_n 里 面一定包含了 a2a_2 所以我们一定最后得到的a2a_2 等于 1 , 如果不是 1 , 说明不包含 ,则不可以整除。