题解:P15802 [GESP202603 七级] 拆分

· · 题解

前言

我常常追忆过去。

我们知道如果将一个数拆成两个数使其乘积最大,那这两个数最优就是相等或相差不大。

所以同周长下正方形面积比长方形大。

正文

运用到此题,对于样例有:

多试几个数,我们同样可以发现在 n > 3 时使用 3^x 乘上剩下一个 24 就可以达到最大值。

为什么呢?

我们可以思考思考,分出来的数只能是质数,因为合数可以被质数分解,而对于 n \le 3 时,它们自身就是最大值。所以我们就可以探讨 n > 3 时怎么解决了。

6 为例:6=2+2+2,而乘积是 2^3=8;但对于 3 而言:6=3+3,乘积是 3^2=9

很明显 9 > 8

所以这说明使用 3 比使用 2 分解 n 更好。

再来看以 21=3 \times 7=3 \times 6 +3 为例:

当然你也可以举其他栗子来说明,总之使用 $3$ 来分解 $n$ 是最优的。 ~~这说明样例很重要。~~ 得到这个结果我们就可以动手写了,吗? 看上上句话:样例很重要。因为我们前面举的例子都是 $n$ 能被 $3$ **整除**的! 如果多 $1$ 呢?根据样例得到,少乘一个 $3$ 改成乘 $4$ 呗。 多 $2$ 呢?~~根据样例得到,~~ 再乘个 $2$ 呗! 做完了,真的。 ## [AC](https://www.luogu.com.cn/record/267544508) CODE :::success[Code] ~~看来你还没学废。~~ ```cpp LL qow(LL x,LL y,LL res=1){ while(y){ if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } the res; } //快速幂 //主函数部分: if(n < 3) cout<<n<<"\n"; elif(n % 3 == 0) cout<<qow(3,n/3)<<"\n"; elif(n % 3 == 1) cout<<qow(3,n/3-1)*4%mod<<"\n"; else cout<<qow(n/3)*2%mod<<"\n"; ``` ::: ## 写在最后 声明:我的解法不一定正而且证明或许不太全面,~~因为本人是个蒟蒻~~相当于浅层理解,如果有其他大佬更强请看他们的佳作。对于我的,额,不喜勿盆,谢谢! 题解来之不易,审核题解不易,点个赞再走吧!!! 管理员大大辛苦了!!!