P4157[SCOI2006]整数划分

    科技2025-08-12  7

    P4157 [SCOI2006]整数划分 数学推导 + 大数

    题意思路Code(67MS)

    传送门:https://www.luogu.com.cn/problem/P4157

    借鉴大佬:https://blog.csdn.net/oampamp1/article/details/108919448

    题意

    给一个整数N,将他拆成若干整数,求他们乘积最大值。

    思路

    先 将 题 目 转 化 一 下 : 先将题目转化一下:

    已 知 ∑ i = 1 n x i = N , 求 m a x { ∏ i = 1 n x i }          ( n 表 示 x i 有 几 项 ) 已知\sum_{i=1}^n x_i=N,求max\{\prod_{i=1}^n x_i\}\;\;\;\;(n表示x_i有几项) i=1nxi=Nmax{i=1nxi}(nxi)

    首 先 根 据 均 值 不 等 式 ( 调 和 ≤ 几 何 ≤ 算 术 ≤ 平 方 ) : 首先根据均值不等式(调和\leq 几何\leq 算术 \leq 平方): n ∑ i = 1 n 1 x i ≤ ∏ i = 1 n x i n ≤ ∑ i = 1 n x i n ≤ ∑ i = 1 n x i 2 n n \frac{n}{\sum_{i=1}^n\frac{1}{x_i}}\leq \sqrt[n]{\prod_{i=1}^nx_i}\leq \frac{\sum_{i=1}^nx_i}{n}\leq \sqrt[n]\frac{\sum_{i=1}^nx_i^2}{n} i=1nxi1nni=1nxi ni=1nxinni=1nxi2

    所 以 可 以 得 到 : 所以可以得到: ∑ i = 1 n x i n ≥ ∏ i = 1 n x i n \frac{\sum_{i=1}^nx_i}{n}\ge \sqrt[n]{\prod_{i=1}^nx_i} ni=1nxini=1nxi

    ( ∑ i = 1 n x i n ) n ≥ ∏ i = 1 n x i \left( \frac{\sum_{i=1}^nx_i}{n} \right)^n\ge \prod_{i=1}^nx_i (ni=1nxi)ni=1nxi

    观 察 上 式 , 要 使 乘 积 最 大 , 那 需 要 尽 量 取 等 号 , 所 以 x i 要 尽 量 平 均 , 所 以 得 到 下 式 : 观察上式,要使乘积最大,那需要尽量取等号,所以x_i要尽量平均,所以得到下式: 使xi

    ( N n ) n = ∏ i = 1 n x i \left( \frac{N}{n} \right)^n= \prod_{i=1}^nx_i (nN)n=i=1nxi

    令 y = ( N n ) n , 两 边 同 时 取 对 数 得 : 令y=(\frac{N}{n})^n,两边同时取对数得: y=(nN)n

    ln ⁡ y = n ln ⁡ N − n ln ⁡ n \ln y=n\ln N-n\ln n lny=nlnNnlnn

    两 边 同 时 对 n 求 导 得 : 两边同时对n求导得: n

    y ′ y = ln ⁡ N − l n n − 1 \frac{y'}{y}=\ln N-ln n - 1 yy=lnNlnn1

    得 y ′ = ( ln ⁡ N − ln ⁡ n − 1 ) ( N n ) n 得y'=(\ln N-\ln n - 1)(\frac{N}{n})^n y=(lnNlnn1)(nN)n

    令 y ′ = 0 , 因 为 ( N n ) n > 0 , 所 以 ln ⁡ N − ln ⁡ n − 1 = 0 , 即 : 令y'=0,因为(\frac{N}{n})^n>0,所以\ln N-\ln n - 1=0,即: y=0(nN)n>0lnNlnn1=0

    n = e ln ⁡ N − 1 = N e n=e^{\ln N - 1}=\frac{N}{e} n=elnN1=eN

    由 于 n 是 在 整 数 域 里 , 所 以 n 只 有 两 个 选 择 N 2 和 N 3 , 那 么 该 取 哪 一 个 呢 ? 由于n是在整数域里,所以n只有两个选择\frac{N}{2}和\frac{N}{3},那么该取哪一个呢? nn2N3N

    刚 开 始 的 ∏ i = 1 n x i = ( N n ) n = 2 N 2 或 3 N 3 , 现 在 就 看 哪 个 大 。 刚开始的\prod_{i=1}^nx_i=(\frac{N}{n})^n=2^{\frac{N}{2}}或3^{\frac{N}{3}},现在就看哪个大。 i=1nxi=(nN)n=22N33N

    根 据 上 图 可 知 , 2 N 2 < 3 N 3 , 当 然 也 可 以 手 动 算 一 下 。 根据上图可知,2^{\frac{N}{2}}<3^{\frac{N}{3}},当然也可以手动算一下。 22N<33N,

    所 以 得 ∏ i = 1 n x i = 3 N 3 最 大 , 即 优 先 取 3 , 没 有 3 取 2 , 总 之 , 推 导 到 最 后 就 是 个 憨 憨 题 。 总 结 一 下 : 所以得\prod_{i=1}^nx_i=3^{\frac{N}{3}}最大,即优先取3,没有3取2,总之,推导到最后就是个憨憨题。总结一下: i=1nxi=33N332

    让 N m o d    3 : 让N mod \;3: Nmod3:

    − N m o d    3 = 0 , 全 部 拆 成 3 , a n s = 3 N 3 - N mod\; 3=0,全部拆成3,ans=3^{\frac{N}{3}} Nmod3=03ans=33N − N m o d    3 = 1 , 拿 出 一 个 3 然 后 加 1 组 成 4 , 其 他 都 为 3 , a n s = 3 N − 1 3 − 1 ∗ 4 - Nmod\;3=1,拿出一个3然后加1组成4,其他都为3,ans=3^{\frac{N-1}{3}-1}*4 Nmod3=13143ans=33N114 − N m o d    3 = 2 , 拿 出 一 2 , 其 他 都 为 3 , a n s = 3 N − 2 3 ∗ 2 -Nmod\;3=2,拿出一2,其他都为3,ans=3^{\frac{N-2}{3}}*2 Nmod3=223ans=33N22

    由 于 答 案 爆 l o n g l o n g , 所 以 用 J A V A 大 数 , 这 不 比 高 精 度 香 吗 ? 由于答案爆longlong,所以用JAVA大数,这不比高精度香吗? longlongJAVA

    Code(67MS)

    import java.util.*; import java.math.*; import static java.lang.Math.min; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N; N = in.nextInt(); BigInteger ans = new BigInteger("1"); if(N % 3 == 0) { ans = BigInteger.valueOf(3).pow((N / 3)); } else if(N % 3 == 1) { ans = BigInteger.valueOf(3).pow((N / 3 - 1)).multiply(BigInteger.valueOf(4)); } else if(N % 3 == 2) { ans = BigInteger.valueOf(3).pow((N / 3)).multiply(BigInteger.valueOf(2)); } String s = ans.toString(); System.out.println(s.length()); for(int i = 0;i < min(100, s.length()); i++) { System.out.print(s.charAt(i)); } System.out.println(); } }
    Processed: 0.018, SQL: 8