原题为:
对于第二问,经过演算得到答案为pow(e,-1/k),下面用程序验证一下(k=1)的情况,n从1到20
#include<iostream>
using namespace std;
#define e 2.718281828459
double g(double k)
{
return pow(e,-1.0/k);
}
#define bint __int64
bint f(bint n)
{
if(n==1||n==0) return 1;
else return n*f(n-1);
}
bint Com(bint n,bint k)
{
return f(n)/f(n-k)/f(k);
}
bint process(bint n,bint k)
{
bint ans = f(n);
for(int i=1;i<=n/k;i++)
{
bint tem = 1;
for(int j=1;j<=i;j++)
tem *= Com(n-k*j+k,k)*f(k-1);
tem *= f(n-i*k);
tem /= f(i);
if(i&1)ans -= tem;
else ans += tem;
}
return ans;
}
int main()
{
bint n,k;
for(int i=1;i<=20;i++)
{
//printf("fk(n)为:%.20lf\n",(double)process(n,k));
printf("当n=%02d时,fk(n)/n!为:%.20lf\n",i,(double)process(i,1)/f(i));
}
printf("pow(e,-1/k)为: %.20lf\n",g(1));
return 0;
} 测试结果如下图:
可见当k=1,n从1-20变化时,fk(n)/n!逼近pow(e,-1/k);