P4157 [SCOI2006]整数划分

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

传送门: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();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值