問題 A: 組合數
阿新 • • 發佈:2019-01-02
問題 A: 組合數
時間限制: 1 Sec 記憶體限制: 128 MB
提交: 1938 解決: 147
[提交] [狀態] [命題人:jsu_admin]
題目描述
求組合數C(N,M),以及C(N,M)因子個數。
輸入
N和M,其中0<=M<=N<=50,以EOF結束。
輸出
該組合數結果
樣例輸入 Copy
3 2 4 2
樣例輸出 Copy
3 2 6 4
#include<cstdio> #include<cstring> using namespace std; typedef long long ll; ll ans1; int a[60]; ll C(int n,int m) { memset(a,0,sizeof(a)); for(int i=n;i>=n-m+1;i--) { int t=i; for(int j=2;j<=t;j++) while(t%j==0)a[j]++,t/=j; } for(int i=2;i<=m;i++) { int t=i; for(int j=2;j<=t;j++) while(t%j==0) a[j]--,t/=j; } ll ans=1; for(int i=2;i<60;i++) if(a[i]) ans*=a[i]+1; ans1=1; for(int i=2;i<60;i++) if(a[i]) for(int j=1;j<=a[i];j++) ans1*=i; return ans; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { ll ans=C(n,m); printf("%lld %lld\n",ans1,ans); } }