给定 k 值。这样 k<=100000 我们必须打印对的数量,使得每对元素的总和可以被 k 整除。在以下条件下,第一个元素应该小于第二个,并且两个元素都应该小于 10 9。
什么是最快的算法和代码实现来计算以下表达式的值?
N!/(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;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,n!除以q! r时间.
我给了n≤3×10 6并且q <n,并且保证(q!)r将干净地划分n!.