#P12070. [THOI 2014] 函数求解

[THOI 2014] 函数求解

背景

搬运自 2014 年清华大学信息学邀请赛。原题测试数据有误,感谢

https://www.luogu.com.cn/user/752017

题目描述

定义正整数域上的函数 f(x):N+→N+f(x): \N^+ \to \N^+ 满足:

f(tmf(s))=sf(t)m,∀s,t∈N+f(t^mf(s))=sf(t)^m,\forall s,t \in \N^+

满足条件的函数会有很多,例如 f(x)=xf(x)=x 就是一个解。

现给定 m,nm,n,求 f(n)f(n) 的最小值。

输入格式

由于输入的 nn 可能很大,我们按照质因数分解的形式输入:

n=∏i=1dpiqin=\displaystyle\prod_{i=1}^{d}p_i^{q_i}

输入第一行包含两个整数 m,dm,d。接下来 dd 行,第 ii 行包含一对整数 p,qp,q。数据保证 pp 为质数且 qi>0q_i \gt 0。

输出格式

输出一行表示最小的 f(n)f(n),由于数值较大,请将输出答案以 ee 为底取对数输出,即 ln⁡(f(n))\ln(f(n))。结果保留四位小数。

2 2
2 1
3 2
2.4849

提示

【样例解释】

n=2×32=18n=2\times3^2=18。

一个可行的最优解为:

nn f(n)f(n)
11
22 33
33 22
44 99
55 77
66
77 55
88 2727
99 44
1010 2121
1111 1313
1212 1818
1313 1111
1414 1515
1515 1414
1616 8181
1717 2323
1818 1212

f(n)=12f(n)=12,而这个可行解是让 f(n)f(n) 最小的解之一,故最终答案为 ln⁡(12)≈2.4849\ln(12)\approx2.4849。

【小贴士】

在 C/C++ 中,包含在 <math.h>(或 <cmath> )中的 log 函数,即 ln⁡\ln 函数。

对于保留 44 位有效数字的输出,C/C++ 输出语句举例: printf("%.4f\n", answer);

在 Pascal 中直接使用函数 ln 即可。

对于保留 44 位有效数字的输出,Pascal 输出语句举例: writeln(answer:0:4);

【数据范围】

本题共 2020 个测试点,每个测试点等分。

测试点 特殊性质
1∼21 \sim 2 m≤2,n≤10m \le 2, n \le 10
3∼53 \sim 5 pi≤100,qi≤1,m≤2,d≤10p_i \le 100, q_i \le 1,m \le 2, d \le 10
6∼76 \sim 7 pi≤1000,qi≤1,m≤2,d≤50p_i \le 1000, q_i \le 1, m \le 2, d \le 50
8∼108 \sim 10 pi≤1000,qi≤2,m≤2,d≤50p_i \le 1000, q_i \le 2, m \le 2, d \le 50
11∼1511 \sim 15 pi≤2000,qi≤5,m≤10,d≤50p_i \le 2000, q_i \le 5, m \le 10, d \le 50
16∼2016 \sim 20 pi≤2000,qi≤5,m≤10,d≤100p_i \le 2000, q_i \le 5, m \le 10, d \le 100