计算以下表达式值的最快算法和代码实现是什么?
嗯!/ (q!) r
我的代码
public static double timesbyf(int n,int q,int qt,int qp1,int qp1t)
{
int totaltimes=qt+qp1t;
double ans=1.0d;
for(int i=1;i<=totaltimes;i++)
{
if(i<=qt)
{
for(int j=q;j>0;j--)
{
ans=ans*((double)n/(double)j);
n--;
}
}
else
{
for(int j=qp1;j>0;j--)
{
ans=ans*((double)n/(double)j);
n--;
}
}
}
while(n>0)
{
ans=(ans*n)%3046201;
n--;
}
return ans;
}
也就是n!
除以q!
r
倍。
给定 n ≤ 3 × 10 6且 q < n,并且保证 (q!) r将干净地整除 n!。