#include<iostream>
#include"cstdio"
using namespace std;
typedef long long ll;
int main(){
int n,m;
while(scanf("%d%d",&n,&m),(n+m)) //n!/(n-m)!m! = 1...m,m+1...n 消 1...m 剩下 m+1...n/1...n-m
{
int i,j;
ll ans=1;
for(i=m+1,j=2;i<=n;i++) //然后i从m+1枚举到n 不要从n枚举到m+1会溢出,j初始化为2,j代表的是分母
{
ans*=i; //先乘上i
while(ans%j==0&&j<=n-m) //当可以整除当前的j就先除去它,然后判断下一个J
{
ans/=j;j++;
}
}
printf("%d things taken %d at a time is %I64d exactly.\n",n,m,ans);
}
return 0;
}
poj 1036 n!/(n-m)!*m!
最新推荐文章于 2021-05-21 10:22:19 发布