某市人口 p0,每年自身人口增长 percent % 。每年固定的,外来移民人数有 aug 人,
问哪一年人数可以大于等于 p
from math import ceil, log
def nb_year(p0, percent, aug, p):
percent = 1 + percent / 100.
r = aug / (1 - percent)
return ceil(log((p - r) / (p0 - r), percent))
有人看出来是,这是什么原理吗
1
frmongo OP 测试 print(nb_year(1500000, 2.5, 10000, 2000000)) 答案 10,算法没问题,我没看懂
|
2
frmongo OP 看来得泛泛高数书了,数列问题
|
3
Xs0ul 2018-08-28 22:40:56 +08:00
无自然增长,也就是 percent=0 的时候会出错的(
|
4
justou 2018-08-28 22:58:54 +08:00
假设每年人口增长率为 r
1 年后, 总人口 = p0(1+r) + aug 2 年后, 总人口 = [p0(1+r) + aug](1+r) + aug = p0(1+r)^2 + aug(1+r) + aug ... n 后年, 总人口 = p0(1+r)^n + aug(1+r)^(n-1) + ... + aug(1+r) + aug 根据题设, 模型是这样的么? |
5
lizon 2018-08-28 23:43:29 +08:00
|
6
zcjfesky 2018-08-28 23:43:35 +08:00 via Android
你这个不是可以数学方法求解的吗… 设第 n 年人口数为 pop(n),则{pop(n)+aug/percent}为以 1+percent 为公比的等比数列
|
7
Xs0ul 2018-08-29 00:07:34 +08:00
给个直观解释:想象外来移民全来自于另一个城市 B,B 人口增长率和题目里的城市 A 一致,并且每年增长的人数全移民到 A。所以 B 的人口是 aug/percent
于是原来问题等价于总人口为 p0+aug/percent 的两个城市 AB,多久能增长到 p+aug/percent |
9
f4nyc 2018-08-29 12:31:10 +08:00 via iPhone
恕我直言,这是中学数学……
四楼的模型是正确的,p0(1+r)^n + aug(1+r)^(n-1) + ... + aug(1+r) + aug=p0(1+r)^n+aug((1+r)^n - 1)/r > p (1+r)^n>(p+aug/r)/(p0+aug/r) 当然这个代码也有点脱裤子放屁 |
10
ddzzhen 2018-08-29 16:02:46 +08:00
复利计算
|
12
frmongo OP 有始有终,我记录了下过程
|