题意:一个外星人每时每刻都能制造出随机数量的器官。已知平均每天能制造出λ数量器官,求一天内制造器官不超过n的概率。
思路:由于他每时每刻都在随机制造一定数量的器官。所以我们考虑一个瞬间,要么制造出一个器官,要么是0。这显然是一个二项分布。但是要满足上述说法,必须把时间划分精确到一个瞬间,也就是二项分布的n必须无穷大。这时候就要用到Poisson分布,当二项分布的n很大而p(λ=np,λ为均值)很小时,泊松分布可作为二项分布的近似。显然这题的n相对p来说很大,p很小。值得注意的是你并不能直接用Poisson分布的公式算出每一项P(x),因为那样你不得不面临计算高次幂而产生的精度问题。所以用递推式即可。
p(0)=e^(-λ)
p(x)=p(x-1)*λ/x (x>=1)
代码:
#include<stdio.h>
#include<math.h>
#define N 110
double f[N];
const double e=2.718281828;
int main()
{
int re,n;
double p;
scanf("%d",&re);
while(re--){
scanf("%d%lf",&n,&p);
double ans=0;
ans+=(f[0]=pow(e,-p));
for(int i=1;i<=n;i++)
ans+=(f[i]=f[i-1]*p/i);
printf("%.3f\n",ans);
}
return 0;
}