本文共 1142 字,大约阅读时间需要 3 分钟。
题意:已知C(m,n) = m!/(n!(m-n)!),已知p,q,r,s,求C(p,q)/C(r,s)
思路:
全部分解成质因子,相乘则加,除则减
#include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const int N =10001;vector prime;int pri[N];int num[N];void getprime(){ memset(pri,1,sizeof(pri)); for(int i = 2; i <= N; i++) { if(pri[i]) { prime.push_back(i); for(int j = i+i; j <= N; j+=i) pri[j] = 0; } }}void add_factorial(int n,int d) //{ for(int i = 1;i <= n;i++) { int tt = i; for(int j = 0;j < prime.size();j++) { while(tt % prime[j] == 0) { num[j]+=d; tt /= prime[j]; } if(tt == 1) break; } }}int main(){ int p,q,r,s; getprime(); while(scanf("%d%d%d%d",&p,&q,&r,&s) != EOF) { memset(num,0,sizeof(num)); add_factorial(p,1); add_factorial(q,-1); add_factorial(p-q,-1); add_factorial(r,-1); add_factorial(s,1); add_factorial(r-s,1); double ans = 1.0; for(int i = 0;i < prime.size();i++) { ans *= pow(prime[i],num[i]); } printf("%.5lf\n",ans); } return 0;}
转载于:https://www.cnblogs.com/Przz/p/5409720.html