uva10375(唯一分解定理)
2017-02-25 17:17
429 查看
题目要求:求两个组合数的商。
分析:这个题对于数据大小的要求不是很高,一除一乘也能过,传统的解法是将阶乘中的每个数进行唯一分解记录每个素数出现的次数,最终相乘。
收获:加强了对于唯一分解定理的理解和应用。唯一分解定理往往适用于不能直接计算会溢出而最终结果不会溢出的情况。 素数表印象加深。
代码1: 一乘一除(0ms)
代码二:唯一分解(210ms)
分析:这个题对于数据大小的要求不是很高,一除一乘也能过,传统的解法是将阶乘中的每个数进行唯一分解记录每个素数出现的次数,最终相乘。
收获:加强了对于唯一分解定理的理解和应用。唯一分解定理往往适用于不能直接计算会溢出而最终结果不会溢出的情况。 素数表印象加深。
代码1: 一乘一除(0ms)
#include <cstdio> int main() { int p, q, r, s; while (~scanf("%d%d%d%d",&p,&q,&r,&s)) { if (p-q < q) q = p-q; if (r-s < s) s = r-s; double sum = 1.0; for (int i = 1; i <= q || i <= s; ++ i) { if (i <= q) sum = sum*(p-q+i)/i; if (i <= s) sum = sum*i/(r-s+i); } printf("%.5lf\n",sum); } return 0; }
代码二:唯一分解(210ms)
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> using namespace std; const int MAXN=10000; int prime[MAXN+1]; int nprime; void getPrime(){ int m=sqrt(MAXN+0.5); memset(prime,0,sizeof(prime)); for(int i=2;i<=m;++i)if(!prime[i]) for(int j=i*i;j<=MAXN;j+=i) prime[j]=1; nprime=0; for(int i=2;i<=MAXN;++i){ if(!prime[i]) prime[nprime++]=i; } } 4000 int e[MAXN+1]; void add_integer(int n,int d){ for(int i=0;i<nprime;i++){ while(n%prime[i]==0){ n/=prime[i]; e[i]+=d; } if(n==1) break; } } void add_factorial(int n,int d){ for(int i=1;i<=n;i++) add_integer(i,d); } int main(){ getPrime(); int p,q,r,s; while(scanf("%d%d%d%d",&p,&q,&r,&s)!=EOF){ memset(e,0,sizeof(e)); 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); int maxn=max(p,r); double ans=1; for(int i=0;i<=maxn;i++){ ans*=pow(prime[i],e[i]); } printf("%.5lf\n",ans); } return 0; }
相关文章推荐
- Uva 10375 选择与除法 唯一分解定理
- uva10375 选择与除法 唯一分解定理
- UVA 10375 唯一分解定理
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- uva 10375 唯一分解定理
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- 筛法求素数,组合数公式,唯一分解定理(选择与除法,uva 10375)
- UVa10375(唯一分解定理)
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- UVA10375 Choose and Divide (唯一分解定理)
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- Choose and divide UVA - 10375 (数论+唯一分解定理)
- Uva 10375 Choose and divide 素数唯一分解定理
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- uva 10375 唯一分解定理
- 例10-3 uva10375(唯一分解定理)
- UVa-10375 Choose and divide 【唯一分解定理】
- 例10-3 uva10375(唯一分解定理)
- uva 10375 唯一分解定理 筛法求素数【数论】
- UVA - 10375 Choose and divide 唯一分解定理