背景:
教授在打概率和期望中的《灯蹬登》,需要推式子。众所周知,一个正确的式子不光要可以解释已有的数据,还要能预测未知数据的结果。在这样的情况下,组合数学的工具是必不可少的。我们通过这个工具实现了三种计算器无法直接实现的功能:
- 输入\(A,m,n\),表示求\(A^m_n\)的值
- 输入\(C,m,n\),表示求\(C^m_n\)的值
- 输入\(D,m,n\),表示求m/n的最简分数形式
注意数据范围,使用的是unsigned long long,有可能会带来一些问题。
代码:
#include<bits/stdc++.h>
using namespace std;
char in;
unsigned long long a,b,js[100001],cnt;
inline unsigned long long A(unsigned long long x,unsigned long long y)
{while(cnt<=y){cnt++;js[cnt]=js[cnt-1]*cnt;}return js[y]/js[y-x];
}
inline unsigned long long C(unsigned long long x,unsigned long long y)
{while(cnt<=y){cnt++;js[cnt]=js[cnt-1]*cnt;}return js[y]/js[y-x]/js[x];
}
int main()
{js[0]=1;while(1){scanf("%c",&in);if(in=='A'){scanf("%lld%lld",&a,&b);printf("%lld\n",A(a,b));}if(in=='C'){scanf("%lld%lld",&a,&b);printf("%lld\n",C(a,b));}if(in=='D'){scanf("%lld%lld",&a,&b);unsigned long long c=__gcd(a,b);printf("%lld/%lld\n",a/c,b/c);}}
}
打开即食,效果很好。