1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 整数分拆等式
对于某些正整数k,存在形如4^t = 2^t + k的整数分拆, 其中4^t,2^t和k均为正整数,而t为实数。
前两个这样的分拆分别是4^1 = 2^1 + 2和4^{1.5849625…} = 2^{1.5849625…} + 6。
如果t也是整数,这样的分拆称为完美的。 对于任意m ≥ 1,记P(m)是所有k ≤ m的分拆中完美分拆的比例。 因此P(6) = 1/2。
下面的表格列出了P(m)的部分取值:
P(5) = 1/1 P(10) = 1/2 P(15) = 2/3 P(20) = 1/2 P(25) = 1/2 P(30) = 2/5 … P(180) = 1/4 P(185) = 3/13
求出使得P(m) < 1/12345的最小m值。
上面这道题我的思路是: 首先注意到4^t==2^{2*t},所以设x=2^t,其中t是实数,那么 k=x^2-x 所以当x是整数的时候k一定是整数,反之不一定成立. 对于k<=m的限定,可以先用m=x^2-x求出两个x解,设正数解为x1,那么[2,\lfloor x1\rfloor]的部分全部都是分拆的可行解. 在这之中完美分拆的占比可以用2倍增去算,直到超过x1为止,这样比例就能算出来了.
对于上面确定的m,检查的时间复杂度是O(logn),瓶颈在于2的倍增. 我们套一个二分即可查出这个概率.
现在请你按照上面我的思路写一下python脚本.
|