博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1263 (求导后高精)
阅读量:5008 次
发布时间:2019-06-12

本文共 1035 字,大约阅读时间需要 3 分钟。

原题 将一个正整数分成若干份,使其乘积最大

显然即求\((\dfrac{a}{x})^x\)的最大值
y=\((\dfrac{a}{x})^x\) 两边取对数
\(lny=x(lna-lnx)=xlna-xlnx\) 求一下导
\(y'/y=lna-lnx-1=ln\dfrac{a}{e}-lnx\)
所以\(y'=(\dfrac{a}{x})^x*(ln\dfrac{a}{e}-lnx)\)
当x取到\(\dfrac{a}{x}\)时为0,此时\(\dfrac{a}{x}=e\)
由于我们是取整数 所以取与e最接近的3为底
当这个正整数是3的倍数的时候 取\(3^n\)次即可
当模3余1时 最后一个非3的数取4,因为\(4>3*1\)
当模3余2时 最后一个非3的数取4 因为\(2*3>5\)
最后写一下高精就好了

#include
#include
#include
using namespace std;struct bigint{ int s[8000],l; bigint(){memset(s,0,sizeof(s));l=0;} bigint operator * (const bigint& b){ bigint all; for(int i=0;i
>=1,x=x*x) if(i&1) w=w*x; return w;}int main(){ int n;scanf("%d",&n);bigint w; bigint t;t.s[0]=2,t.l=1;bigint three;three.s[0]=3,three.l=1; if(n%3==1) w=qpow(three,n/3-1)*t*t; else if(n%3==2) w=qpow(three,n/3)*t; else w=qpow(three,n/3); printf("%d\n",w.l); for(int i=w.l-1;i>=max(0,w.l-100);i--) printf("%d",w.s[i]);}

转载于:https://www.cnblogs.com/BLUE-EYE/p/9505039.html

你可能感兴趣的文章
flex入门----基础知识
查看>>
HihoCoder 1877 - Approximate Matching
查看>>
【转】C++多继承的细节
查看>>
物联网实验日志-2016-6-8
查看>>
高德地图、腾讯地图、谷歌中国区地图与百度地图坐标系
查看>>
Elastic Search 语法总结
查看>>
py自动化之环境配置
查看>>
Winodws SNMP服务安装和配置(Windows 2003 & 2008 R2)
查看>>
红黑树-想说爱你不容易
查看>>
Git操作指南
查看>>
Loadrunner安装详解
查看>>
c++ primer读书笔记之c++11(一)
查看>>
【题目】英文字符进行频率的统计,直方图输出
查看>>
php最新变异一句话
查看>>
LeetCode-Binary Tree Level Order Traversal
查看>>
COM组件开发实践
查看>>
yii2 源码分析1从入口开始
查看>>
浅谈网站推广
查看>>
Away3D基础之摄像机
查看>>
Leetcode 128. Longest Consecutive Sequence
查看>>