#luoguP12070. [THOI 2014] 函数求解

[THOI 2014] 函数求解

本题没有可用的提交语言。

题目背景

搬运自 2014 年清华大学信息学邀请赛

题目描述

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

f(tmf(s))=sf(t)m,s,tN+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 个测试点,每个测试点等分。

测试点 特殊性质
121 \sim 2 m2,n10m \le 2, n \le 10
353 \sim 5 pi100,qi1,m2,d10p_i \le 100, q_i \le 1,m \le 2, d \le 10
676 \sim 7 pi1000,qi1,m2,d50p_i \le 1000, q_i \le 1, m \le 2, d \le 50
8108 \sim 10 pi1000,qi2,m2,d50p_i \le 1000, q_i \le 2, m \le 2, d \le 50
111511 \sim 15 pi2000,qi5,m10,d50p_i \le 2000, q_i \le 5, m \le 10, d \le 50
162016 \sim 20 pi2000,qi5,m10,d100p_i \le 2000, q_i \le 5, m \le 10, d \le 100